From db744a3fe4b0e06bd73ea2e760fec3530296ea03 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 21 May 2002 15:27:35 +0000 Subject: Initial revision --- TWiki/GnuSkin/RCS/menuscript.js | 289 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 TWiki/GnuSkin/RCS/menuscript.js diff --git a/TWiki/GnuSkin/RCS/menuscript.js b/TWiki/GnuSkin/RCS/menuscript.js new file mode 100644 index 00000000..6b30f176 --- /dev/null +++ b/TWiki/GnuSkin/RCS/menuscript.js @@ -0,0 +1,289 @@ +// Determine browser type (Netscape 6 or IE 5.5). + + +var isIE5 = (navigator.userAgent.indexOf("MSIE 5.5") > 0) ? 1 : 0; +var isIE5 = (navigator.userAgent.indexOf("MSIE 5") > 0) ? 1 : 0; +var isNS6 = (navigator.userAgent.indexOf("Gecko") > 0) ? 1 : 0; +var isNS4 = ((navigator.appName.indexOf("Netscape")==0) + &&(navigator.userAgent.indexOf("Mozilla/4") == 0)) ? 1 : 0; + +//if (isNS4==0) +// alert("This skin has been designed for Netscape 4.x."); + +// For IE, adjust menu bar styling. + +if (isIE5) { + document.styleSheets[document.styleSheets.length - 1].addRule("#menuBar", "padding-top:3px"); + document.styleSheets[document.styleSheets.length - 1].addRule("#menuBar", "padding-bottom:3px"); +} + +// Global variable for tracking the currently active button. + +var activeButton = null; + +if (isIE5) + document.onmousedown = pageMousedown; +if (isNS6) + document.addEventListener("mousedown", pageMousedown, true); + +function pageMousedown(event) { + + var className; + + // If the object clicked on was not a menu button or item, close any active + // menu. + + if (isIE5) + className = window.event.srcElement.className; + if (isNS6) + className = (event.target.className ? + event.target.className : event.target.parentNode.className); + + //Top menu mouseover + if (className != "menuButton" && className != "menuItem" && className != "menuItemDiff" && activeButton) + resetButton(activeButton); + + + //Left menu show hide + var eSrc = window.event.srcElement; + window.event.cancelBubble = true; + if ("clsShowHide" == eSrc.className) return contentsHeading_click(eSrc); + + //Original version of this (with frames support) + //while ("BODY" != eSrc.tagName) { + // if ("clsItem" == eSrc.className || "clsItemSelect" == eSrc.className) return contentsItem_click(eSrc); + // else if ("clsShowHide" == eSrc.className || "clsHeading" == eSrc.className) return contentsHeading_click(eSrc); + // eSrc = eSrc.parentElement; + //} +} + +function buttonClick(button, menuName) { + + // Blur focus from the link to remove that annoying outline. + + if (!isNS4) + button.blur(); + + // Associate the named menu to this button if not already done. + + if (!button.menu) + { + if (isNS4) + button.menu = document.layers[menuName]; + else + button.menu = document.getElementById(menuName); + } + + + // Reset the currently active button, if any. + + if (activeButton && activeButton != button) + resetButton(activeButton); + + // Toggle the button's state. + + if (button.isDepressed) + resetButton(button); + else + depressButton(button); + + return false; +} + +function buttonMouseover(button, menuName) { + + // If any other button menu is active, deactivate it and activate this one. + // Note: if this button has no menu, leave the active menu alone. + + if (activeButton) { + if (activeButton != button) { + resetButton(activeButton); + if (menuName) + buttonClick(button, menuName); + } + else { + } + } + else { + if (menuName) + buttonClick(button, menuName); + } +} + +function depressButton(button) { + + // Save current style values so they can be restored later. + // Only needs to be done once. + + if (!button.oldBackgroundColor) { + button.oldBackgroundColor = button.style.backgroundColor; + button.oldBorderBottomColor = button.style.borderBottomColor; + button.oldBorderRightColor = button.style.borderRightColor; + button.oldBorderTopColor = button.style.borderTopColor; + button.oldBorderLeftColor = button.style.borderLeftColor; + button.oldColor = button.style.color; + button.oldLeft = button.style.left; + button.oldPosition = button.style.position; + button.oldTop = button.style.top; + } + + // Change style value to make the button looks like it's + // depressed. + + button.style.backgroundColor = "#99CC99"; + button.style.borderBottomColor = "#99CC99"; + button.style.borderRightColor = "#99CC99"; + button.style.borderTopColor = "#99CC99"; + button.style.borderLeftColor = "#99CC99"; + button.style.color = "#E9E9E9"; + button.style.left = "0px"; + button.style.position = "relative"; + button.style.top = "0px"; + + // For IE, force first menu item to the width of the parent menu, + // this causes mouseovers work for all items even when cursor is + // not over the link text. + + if (isIE5 && !button.menu.firstChild.style.width) + button.menu.firstChild.style.width = + button.menu.offsetWidth + "px"; + +if (isNS4) +{ + button.menu.left = (window.innerWidth-100); + button.menu.top = 0; + button.menu.visibility = "show"; +} +else +{ + + + // Position the associated drop down menu under the button and + // show it. Note that the position must be adjusted according to + // browser, styling and positioning. + + //x = getPageOffsetLeft(button); + x = getPageOffsetLeft(button); + y = getPageOffsetTop(button) + button.offsetHeight; + if (isIE5) + y += 2; + if (isNS6) { + x--; + y--; + } + x -= 20; + y -= 10; + button.menu.style.left = x + "px"; + button.menu.style.top = y + "px"; + button.menu.style.visibility = "visible"; +} + + // Set button state and let the world know which button is + // active. + + button.isDepressed = true; + activeButton = button; +} + +function resetButton(button) { + + // Restore the button's style settings. + + button.style.backgroundColor = button.oldBackgroundColor; + button.style.borderBottomColor = button.oldBorderBottomColor; + button.style.borderRightColor = button.oldBorderRightColor; + button.style.borderTopColor = button.oldBorderTopColor; + button.style.borderLeftColor = button.oldBorderLeftColor; + button.style.color = button.oldColor; + button.style.left = button.oldLeft; + button.style.position = button.oldPosition; + button.style.top = button.oldTop; + + // Hide the button's menu. + + if (button.menu) + { + if (isNS4) + button.menu.visibility = "hide"; + else + button.menu.style.visibility = "hidden"; + + } + + + // Set button state and clear active menu global. + + button.isDepressed = false; + activeButton = null; +} + +function getPageOffsetLeft(el) { + + // Return the true x coordinate of an element relative to the page. + + return el.offsetLeft + (el.offsetParent ? getPageOffsetLeft(el.offsetParent) : 0); +} + + +function getPageOffsetTop(el) { + + // Return the true y coordinate of an element relative to the page. + + return el.offsetTop + (el.offsetParent ? getPageOffsetTop(el.offsetParent) : 0); +} + + +// Swap background colour +function bgcolour(obj, Colour) { + obj.style.backgroundColor=Colour +} + +//Pop up window +function MM_openBrWindow(theURL,winName,features) { //v2.0 + window.open(theURL,winName,features); +} + +function MM_findObj(n, d) { //v3.0 + var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { + d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} + if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i