From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- lib/erl_docgen/priv/js/flipmenu/flipmenu.js | 352 ++++++++++++++++++++++++++++ 1 file changed, 352 insertions(+) create mode 100644 lib/erl_docgen/priv/js/flipmenu/flipmenu.js (limited to 'lib/erl_docgen/priv/js/flipmenu/flipmenu.js') diff --git a/lib/erl_docgen/priv/js/flipmenu/flipmenu.js b/lib/erl_docgen/priv/js/flipmenu/flipmenu.js new file mode 100644 index 0000000000..1f70f2509b --- /dev/null +++ b/lib/erl_docgen/priv/js/flipmenu/flipmenu.js @@ -0,0 +1,352 @@ +// ###################################################################### + +// ## flipMenu 5.0.0 (c) J. Reijers +// ## Last modifications: 23 March 2007 + +// ###################################################################### + +// ## Degree of indentation from the left. + flipIndentation = "5px"; + +// ## Padding inbetween menu items. + flipVerticalPadding = "4px"; + +// ## Margin between the left of the browser and the menu. + flipLeftMargin = "16px"; + +// ## Margin between the top of the browser and the menu. + flipTopMargin = "10px"; + +// ## Allow multiple menus to fold out without closing all the other open ones. + flipOpenMultipleMenus = false; + +// ## Preserve the current state of the menu (requires cookies). + flipSaveMenuState = false; + +// ## Open entries where the attribute expanded is true + flipMarked = true; + +// ## Use custom images for bullets + flipImages = true; + +// ## Images to use (specify full path) + flipImg_open = "flip_open.gif"; + flipImg_closed = "flip_closed.gif"; + flipImg_static = "flip_static.gif"; + +// ## Initialise all flipMenus onload + flipInitOnLoad = true; + +// ## Message to display in status bar while loading + flipLoadingMessage = "Loading..."; + +// ###################################################################### + +function alterSize(someSize, alterAmount) { + someSize = String(someSize); + var tmpNr = parseFloat(someSize.replace(/\D/g, "")); + var tmpChar = someSize.replace(/\d/g, ""); + return isNaN(tmpNr) ? someSize : ((tmpNr + alterAmount) + tmpChar); +} + +isIE = (String(navigator.appVersion).indexOf("MSIE") > -1); +if (!isIE) flipIndentation = alterSize(flipIndentation, -16); +if (!isIE) flipLeftMargin = alterSize(flipLeftMargin, -16); + +document.write( + "" +); + + + +if (flipImages) { + aFlipPreloads = []; + aFlipPreloads[0] = new Image; + aFlipPreloads[0].src = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_open; + aFlipPreloads[1] = new Image; + aFlipPreloads[1].src = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_closed; + aFlipPreloads[2] = new Image; + aFlipPreloads[2].src = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_static; +} + +function addEvent(someObj, someEvent, someFunction) { + if (someObj.addEventListener) { someObj.addEventListener(someEvent, someFunction, true); return true; } else if (someObj.attachEvent) return someObj.attachEvent("on" + someEvent, someFunction); else return false; +} + +function openCloseFlip(theItem, newSetting, openParents) { + if (theItem.flipID) { + if (openParents) { + var tmpItem = theItem; + while (tmpItem.parentElement || tmpItem.parentNode) { + tmpItem = (tmpItem.parentElement) ? tmpItem.parentElement : tmpItem.parentNode; + openCloseFlip(tmpItem, newSetting); + } + } + if ((theItem.className == "flipFolderOpen" && newSetting == "closed") || (theItem.className == "flipFolderClosed" && newSetting == "open")) { + if (!theItem.childrenInitialised) { + for (var j = 0; j < theItem.childNodes.length; j++) if (theItem.childNodes[j].nodeName == "UL" && !theItem.childNodes[j].initialised) initFlip(theItem.childNodes[j]); + theItem.childrenInitialised = true; + } + theItem.getElementsByTagName("UL")[0].style.display = (newSetting == "open") ? "" : "none"; + theItem.className = newSetting == "open" ? "flipFolderOpen" : "flipFolderClosed"; + } + } +} + +function openFlip(theItem, openParents) { + openCloseFlip(theItem, "open", openParents); +} + +function closeFlip(theItem, closeParents) { + openCloseFlip(theItem, "closed", closeParents); +} + +function toggleFlip(theElement) { + if (theElement.flipID) { + var theItem = theElement; + var isContained = true; + } else { + if (theElement && theElement.button > 0) return false; + var theItem = (isIE) ? event.srcElement : theElement.target; + + var isContained = false; + if (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") isContained = true; else while (theItem.parentElement || theItem.parentNode) { + if (theItem.className == "flipStatic" || theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") { + isContained = (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed"); + break; + } + theItem = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode; + } + } + + var toOpenFlip = (isContained && theItem.className == "flipFolderClosed"); + + if (!flipOpenMultipleMenus && (toOpenFlip || theItem.className == "flipStatic")) { + if (theItem.parentElement || theItem.parentNode) { + var parentUL = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode; + for (var i = 0; i < parentUL.childNodes.length; i++) closeFlip(parentUL.childNodes[i]); + } + } + + if (isContained) { + if (toOpenFlip) openFlip(theItem); else closeFlip(theItem); + } +} + +function setAllFlips(startElement, newSetting) { + if (typeof startElement == "undefined") var startElement = document; + if (typeof newSetting == "undefined") var newSetting = "closed"; + + var aUL = startElement.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var parentFlip = aUL[i].parentElement ? aUL[i].parentElement : aUL[i].parentNode; + openCloseFlip(parentFlip, newSetting); + } +} + +function openAllFlips(startElement) { + setAllFlips(startElement, "open"); +} + +function closeAllFlips(startElement) { + setAllFlips(startElement, "closed"); +} + +function initFlip(startElement) { + if (!document.createElement) return false; + + if (!startElement || !startElement.nodeName) { + var aUL = document.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + if (flipLoadingMessage != "") window.status = flipLoadingMessage + " " + parseInt((i / (aUL.length - 1)) * 100, 10) + "%"; + var curUL = aUL[i]; + if (curUL.className == "flipMenu") { + initFlip(curUL); + + // ## Fix text selecting problem in Mozilla + curUL.onselectstart = new Function("return false"); + curUL.onmousedown = new Function("return false"); + curUL.onclick = new Function("return true"); + } + } + + if (flipSaveMenuState) loadMenuState(); + + if (flipLoadingMessage != "") window.status = ""; + return true; + } + + if (startElement.className == "flipMenu") startElement.style.display = ""; + + if (!startElement.childNodes || startElement.childNodes.length == 0) return false; + + if (typeof flipIDCur == "undefined") flipIDCur = 0; + if (!startElement.initialised) { + var aUL = startElement.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) aUL[i].style.display = "none"; + } + + for (var i = 0; i < startElement.childNodes.length; i++) { + var curNode = startElement.childNodes[i]; + if (curNode.nodeName == "LI") { + flipIDCur++; + curNode.flipID = flipIDCur; + + var nodeHasChildren = curNode.getElementsByTagName("UL").length > 0; + if (nodeHasChildren) { + if (flipImages && curNode.flipClosed) curNode.style.listStyleImage = "url(" + curNode.flipClosed + ")"; + + if (curNode.className == null || curNode.className == "") curNode.className = "flipFolderClosed"; + } else { + curNode.className = "flipStatic"; + if (flipImages && !curNode.style.listStyleImage) { + if (!curNode.flipStatic) curNode.flipStatic = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_static; + curNode.style.listStyleImage = "url(" + curNode.flipStatic + ")"; + } + } + + + if (!curNode.flipOpen) curNode.flipOpen = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_open; + if (!curNode.flipClosed) curNode.flipClosed = document.getElementById("js").getAttribute("src").match( /.*\// ) + flipImg_closed; + + if (flipMarked) { + if (curNode.getAttribute("expanded") == "true") curNode.flipIsOpen=1; + } + + if (curNode.flipIsOpen) openFlip(curNode); + } + } + + startElement.initialised = true; +} + +function rootOfFlip(flipID, startElement) { + + function containsFlip(startElement, flipID) { + var flipFound = false; + var i = 0; + while (i < startElement.childNodes.length && !flipFound) { + var curNode = startElement.childNodes[i]; + flipFound = (curNode.flipID == flipID) ? true : containsFlip(curNode, flipID); + i++; + } + return flipFound; + } + + var rootFlip = null; + + if (!startElement || !startElement.nodeName) { + var aUL = document.getElementsByTagName("UL"); + var i = 0; + while (rootFlip == null && i < aUL.length) { + var curUL = aUL[i]; + if (curUL.nodeName == "UL" && curUL.className == "flipMenu") rootFlip = rootOfFlip(flipID, curUL); + i++; + } + return rootFlip; + } + + if (startElement.childNodes) for (var i = 0; i < startElement.childNodes.length; i++) { + var curNode = startElement.childNodes[i]; + if (curNode.flipID == flipID || containsFlip(curNode, flipID)) rootFlip = curNode; + } + + return rootFlip; +} + +function getCookie(cookieName) { + var allCookies = document.cookie; + var indexStr = allCookies.indexOf(cookieName + "="); + if (indexStr == -1) return ""; + indexStr = allCookies.indexOf("=", indexStr) + 1; + var endStr = allCookies.indexOf(";", indexStr); + if (endStr == -1) endStr = allCookies.length; + return unescape(allCookies.substring(indexStr, endStr)); +} + +function inArray(someID, someArray) { + for (var i = 0; i < someArray.length; i++) if (someArray[i] == someID) return true; + return false; +} + +function getMenuState(startElement) { + if (!startElement.childNodes || startElement.childNodes.length == 0) return ""; + + var openItems = ""; + var aUL = startElement.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var curNode = aUL[i]; + var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode; + if (curNode.style.display == "" && parentFlip.flipID) openItems += " " + parentFlip.flipID; + } + return openItems; +} + +function putMenuState(startElement) { + if (!startElement.childNodes || startElement.childNodes.length == 0) return false; + + var aUL = startElement.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var curNode = aUL[i]; + var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode; + if (inArray(parentFlip.flipID, aOpenItems)) { + openFlip(parentFlip); + if (typeof prevFlipRoot == "undefined") { + var testRoot = rootOfFlip(parentFlip.flipID); + if (testRoot.flipID == parentFlip.flipID) prevFlipRoot = testRoot; + } + } + } +} + +function saveMenuState() { + if (flipSaveMenuState) { + var aUL = document.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var curUL = aUL[i]; + var curID = curUL.id ? curUL.id : i; + if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=" + getMenuState(curUL) + ";"; + } + } +} + +function loadMenuState() { + var aUL = document.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var curUL = aUL[i]; + var curID = curUL.id ? curUL.id : i; + if (curUL.className == "flipMenu") { + var savedState = String(getCookie(cookiePrefix + curID)); + if (savedState != "") { + aOpenItems = savedState.split(" "); + putMenuState(curUL); + } + } + } + + addEvent(window, "unload", saveMenuState); +} + +function clearMenuState(flipMenuID) { + if (typeof flipMenuID == "undefined") { + var aUL = document.getElementsByTagName("UL"); + for (var i = 0; i < aUL.length; i++) { + var curUL = aUL[i]; + var curID = curUL.id ? curUL.id : i; + if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=;"; + } + } else document.cookie = cookiePrefix + flipMenuID + "=;"; +} + +cookiePrefix = document.location.pathname + "_"; + +addEvent(document, "click", toggleFlip); +if (flipInitOnLoad) addEvent(window, "load", initFlip); -- cgit v1.2.3