/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * IBM Help modification : * 2004/9/21 - Updated by nlp for HPSYS00000131 * 2004/9/23 - Updated by luyi for HPSYS00000137 * 2004/9/23 - Updated by luyi for HPSYS00000138 * 2004/9/23 - Updated by luyi for HPSYS00000142(2004/9/30 replace these codes with codes from canada) * 2004/9/23 - Updated by luyi for HPSYS00000154(2004/9/30 replace these codes with codes from canada) * 2004/9/24 - Updated by luyi for HPSYS00000151 * 2004/9/24 - Updated by luyi for HPSYS00000140,155,141 * 2004/9/24 - Updated by luyi for HPSYS00000139 * 2004/9/27 - Updated by luyi for new banned bug(up/down arrow cannot move in sub topic)(2004/9/30 replace these codes with codes from canada) * 2004/9/30 - Updated by luyi for HPSYS00000142,154 to merge codes from canada * 2004/11/3 - Updated by luyi for HPSYS00000214 * 2004/11/16 - Updated by luyi for HPSYS00000214 modify * 2004/11/17 - Updated by Jiang Linquan for HPSYS00000214 add *******************************************************************************/ // Common scripts for IE and Mozilla. var isMozilla = navigator.userAgent.indexOf('Mozilla') != -1 && parseInt(navigator.appVersion.substring(0,1)) >= 5; var isIE = navigator.userAgent.indexOf('MSIE') != -1; var oldActive; var oldActiveClass = ""; // Preload images // ********************************************************** // Note: code moved into the jsp, for dynamic image preferences /** * Returns the target node of an event */ function getTarget(e) { var target; if (isMozilla) target = e.target; else if (isIE) target = window.event.srcElement; return target; } /** * Returns the next tree node "down" from current one */ function getNextDown(node) { var a = getAnchorNode(node); if (!a) return null; // Try visible child first var li = a.parentNode; var ul = getChildNode(li, "UL"); if (ul && ul.className == "expanded") return getDescendantNode(ul, "A"); // Try next sibling var li_sib = getNextSibling(li); if (li_sib != null) return getDescendantNode(li_sib, "A"); // Try looking to parent's sibling while(li_sib == null) { var ul = li.parentNode; li = ul.parentNode; if (li.tagName != "LI") // reached the top, nothing else to do return null; li_sib = getNextSibling(li); } // found the next down sibling return getDescendantNode(li_sib, "A"); } /** * Returns the next tree node "down" from current one */ function getNextUp(node) { var a = getAnchorNode(node); if (!a) return null; // Get previous sibling first var li = a.parentNode; var li_sib = getPrevSibling(li); if (li_sib != null) { // try to get the deepest node that preceeds this current node var candidate = getDescendantNode(li_sib, "A"); var nextDown = getNextDown(candidate); while(nextDown != null && nextDown != node){ candidate = nextDown; nextDown = getNextDown(nextDown); } return getDescendantNode(candidate, "A"); ; } else { // get the parent var li = li.parentNode.parentNode; if (li && li.tagName == "LI") return getDescendantNode(li, "A"); else return null; } } /** * Returns the next sibling element */ function getNextSibling(node) { var sib = node.nextSibling; //HPSYS00000142 while (sib && (sib.nodeType == 3 || sib.tagName=="SCRIPT")) // text node sib = sib.nextSibling; //end HPSYS00000142 code from canada return sib; } /** * Returns the next sibling element */ function getPrevSibling(node) { var sib = node.previousSibling; //HPSYS00000154 while (sib && (sib.nodeType == 3 || sib.tagName=="SCRIPT")) // text node sib = sib.previousSibling; //end HPSYS00000154 from canada return sib; } /** * Returns the child node with specified tag */ function getChildNode(parent, childTag) { var list = parent.childNodes; if (list == null) return null; for (var i=0; i 0){ if (!frames.dynLoadFrame) { return; } var ix = window.location.href.indexOf('?'); if (ix < 0) { return; } var query = window.location.href.substr(ix); frames.dynLoadFrame.location = "tocFragment.jsp" + query + "&path=" + ul.id; } } } /** * Expands the nodes from root to the specified node */ function expandPathTo(node, inclusive) { // when the node is a link, get the plus/minus image if (node.tagName == "A") { var img = getChildNode(node.parentNode, "IMG") if (img == null) return; expandPathTo(img, inclusive); return; } if (inclusive && isCollapsed(node)) expand(node); var li = node.parentNode; if (li == null) return; var ul = li.parentNode; if (ul == null) return; li = ul.parentNode; if (li == null) return; var img = getChildNode(li, "IMG"); if (img == null) return; expandPathTo(img, true); } /** * Returns true when this is an expanded tree node */ function isExpanded(node) { return node.className == "expanded"; } /** * Returns true when this is a collapsed tree node */ function isCollapsed(node) { return node.className == "collapsed"; } /** * Highlights link */ function highlightTopic(topic) { if (isMozilla) window.getSelection().removeAllRanges(); var a = getAnchorNode(topic); if (a != null) { parent.parent.parent.setContentToolbarTitle(tocTitle); if (oldActive) oldActive.className = oldActiveClass; oldActive = a; oldActiveClass = a.className; a.className = "active"; // it looks like the onclick event is not handled in mozilla // *** TO DO: handle failed synchronization, do not select in that case if (isMozilla && a.onclick) a.onclick() //if (isIE) // a.hideFocus = "true"; } } /** * Selects a topic in the tree: expand tree and highlight it * returns true if success */ function selectTopic(topic) { if (!topic) return false; // remove the query, if any var i = topic.indexOf('?'); if (i != -1) topic = topic.substring(0, i); var links = document.getElementsByTagName("a"); //HPSYS00000214 var j,templink; for (var i=0; i= pageTop ) { if (nodeBottom <= pageBottom) scroll = 0; // already in view else scroll = nodeBottom - pageBottom; } else { scroll = nodeTop - pageTop; } return scroll; } /* * Currently called on IE only */ function focusHandler(e) { //HPSYS00000139 part 1 of 2 /*if (isMozilla) return; */ //HPSYS00000139 part 1 of 2 try{ if (oldActive){ // only focus when the element is visible var scroll = getVerticalScroll(oldActive); if (scroll == 0) oldActive.focus(); } } catch(e){} } /** * display topic label in the status line on mouse over topic */ function mouseMoveHandler(e) { var overNode = getTarget(e); if (!overNode) return; overNode = getAnchorNode(overNode); if (overNode == null){ window.status = ""; return; } if (isMozilla) e.cancelBubble = false; if (overNode.title == "") { if (overNode.innerText) overNode.title = overNode.innerText; else if (overNode.text) overNode.title = overNode.text; } window.status = overNode.title; } /** * handler for expanding / collapsing topic tree */ function mouseClickHandler(e) { var clickedNode = getTarget(e); if (isPlusMinus(clickedNode) ) { if (isCollapsed(clickedNode)) expand(clickedNode); else if (isExpanded(clickedNode)) collapse(clickedNode); } else { var plus_minus = getPlusMinus(clickedNode); if (plus_minus != null) highlightTopic(plus_minus); } if (isMozilla) e.cancelBubble = true; else if (isIE) window.event.cancelBubble = true; } /** * handler for expanding / collapsing topic tree */ function mouseDblClickHandler(e) { var clickedNode = getTarget(e); if (!clickedNode) return; var plus_minus = getPlusMinus(clickedNode); if (plus_minus != null) { if (isCollapsed(plus_minus)) expand(plus_minus); else if (isExpanded(plus_minus)) collapse(plus_minus); highlightTopic(plus_minus); } if (isMozilla) e.cancelBubble = true; else if (isIE) window.event.cancelBubble = true; } /** * Handler for key down (arrows) */ function keyDownHandler(e) { var key; if (isIE) { key = window.event.keyCode; } else if (isMozilla) { key = e.keyCode; } if (key <37 || key > 40) return true; if (isMozilla) e.cancelBubble = true; else if (isIE) window.event.cancelBubble = true; if (key == 39) { // Right arrow, expand var clickedNode = getTarget(e); if (!clickedNode) return; //HPSYS00000137 part 1 of 2 if (isIE){ if(clickedNode.id!=null){ if(clickedNode.id.charAt(0)=='b'){ if(clickedNode.name!="opened"){ loadTOC(clickedNode.name); return true; } } } } //end HPSYS00000137 part 1 of 2 var plus_minus = getPlusMinus(clickedNode); if (plus_minus != null) { if (isCollapsed(plus_minus)) expand(plus_minus); highlightTopic(plus_minus); scrollIntoView(clickedNode); } } else if (key == 37) { // Left arrow,collapse var clickedNode = getTarget(e); if (!clickedNode) return; //HPSYS00000137 part 2 of 2 if(clickedNode.id!=null){ if(clickedNode.id.charAt(0)=='b'){ if(clickedNode.name=="opened"){ loadTOC(" "); return true; } //HPSYS00000138 else{ return true; } //end HPSYS00000138 } } //end HPSYS00000137 part 2 of 2 var plus_minus = getPlusMinus(clickedNode); if (plus_minus != null) { if (isExpanded(plus_minus)) collapse(plus_minus); highlightTopic(plus_minus); scrollIntoView(clickedNode); } } else if (key == 40 ) { // down arrow var clickedNode = getTarget(e); if (!clickedNode) return; var next = getNextDown(clickedNode); if (next) next.focus(); } else if (key == 38 ) { // up arrow var clickedNode = getTarget(e); if (!clickedNode) return; var next = getNextUp(clickedNode); if (next) next.focus(); } //HPSYS00000131 //return false; return true; //end of HPSYS00000131 } if (isMozilla) { document.addEventListener('click', mouseClickHandler, true); document.addEventListener('dblclick', mouseDblClickHandler, true); document.addEventListener('mousemove', mouseMoveHandler, true); document.addEventListener('keydown', keyDownHandler, true); } else if (isIE){ document.onclick = mouseClickHandler; document.ondblclick = mouseDblClickHandler; document.onmousemove = mouseMoveHandler; document.onkeydown = keyDownHandler; //HPSYS00000139 part 2 of 2 //HPSYS00000140,155,141 //window.onfocus = focusHandler; //end HPSYS00000140,155,141 //end HPSYS00000139 part 2 of 2 }