//#16.0.1.0 WDMenu.js //VersionVI: 30F160057k // Le seul support technique disponible pour cette librairie est // accessible a travers le service "Assistance Directe". // Manipulation des menus function WDMenu (sAliasChamp, bOnglet) { // Si on est pas dans l'init d'un protoype if (sAliasChamp) { // Appel le constructeur de la classe de base WDChamp.prototype.constructor.apply(this, [sAliasChamp, undefined, undefined]); this.m_bOnglet = bOnglet; } }; // Declare l'heritage WDMenu.prototype = new WDChamp(); // Surcharge le constructeur qui a ete efface WDMenu.prototype.constructor = WDMenu; // Initialisation WDMenu.prototype.Init = function Init() { // Appel de la methode de la classe de base WDChamp.prototype.Init.apply(this, arguments); // Trouve la racine du menu this.m_oRacine = _JGE(this.m_sAliasChamp, document, true, false); // Si le menu n'existe pas (menu invisible avec l'option ne pas generer les champ hidden) if (!this.m_oRacine) { return; } // Applique le changement de style et l'affichage des sous menus en survol d'option if (this.m_bOnglet) { // Traite les onglets this.AjouteJSSurvolOnglet(this.m_oRacine); } // Traite les sous menus normaux this.AjouteJSSurvolSousMenu(this.m_oRacine); }; // Applique le changement de style et l'affichage des onglets WDMenu.prototype.AjouteJSSurvolOnglet = function AjouteJSSurvolOnglet(oRacine) { // Les options sont les TD avec WDOngletOption comme class var tabOnglets = oRacine.getElementsByTagName("td"); var i; var nLimiteI = tabOnglets.length; for (i = 0; i < nLimiteI; i++) { var oOnglet = tabOnglets[i]; if ((oOnglet.className == "WDOngletOption") || (oOnglet.className == "WDOngletOptionSelect")) { var bAvecSousMenu = false; // Cherche sont eventuel sous menu var tabTABLE = oOnglet.getElementsByTagName("table"); var j; var nLimiteJ = tabTABLE.length; for (j = 0; j < nLimiteJ; j++) { var oTABLE = tabTABLE[j]; if (oTABLE.parentNode.className == "WDSousOnglet") { bAvecSousMenu = true; this.AjouteJSSurvol_SousMenu(oOnglet, oTABLE); } } // Si on a pas de sous menu : mettre le code de survol if (!bAvecSousMenu) { this.AjouteJSSurvol_Simple(oOnglet); } } } }; // Applique le changement de style et l'affichage des sous menus en survol d'option WDMenu.prototype.AjouteJSSurvolSousMenu = function AjouteJSSurvolSousMenu(oRacine) { // Liste les fils de la balise et trouve la balise TR si elle existe var tabOptionsMenu = oRacine.getElementsByTagName("tr"); var i; var nLimiteI = tabOptionsMenu.length; for (i = 0; i < nLimiteI; i++) { // Applique le changement de style et l'affichage des sous menus en survol d'un option this.AjouteJSSurvol(tabOptionsMenu[i]); } }; // Applique le changement de style et l'affichage des sous menus en survol d'un option WDMenu.prototype.AjouteJSSurvol = function AjouteJSSurvol(oOptionMenu) { // Si le style de la ligne n'est pas celui d'une option if ((oOptionMenu.className != "WDMenuOption") && (oOptionMenu.className != "WDMenuOptionSelect")) { return; } // Regarde si l'option a un sous menu var tabSousMenus = oOptionMenu.getElementsByTagName("table"); if (tabSousMenus.length) { this.AjouteJSSurvol_SousMenu(oOptionMenu, tabSousMenus[0]); } else { this.AjouteJSSurvol_Simple(oOptionMenu); } }; // Ajoute les fonctions JS en survol pour une option avec un sous menu WDMenu.prototype.AjouteJSSurvol_SousMenu = function AjouteJSSurvol_SousMenu(oOptionMenu, oSousMenu) { // Sauve la classe normale de l'option oOptionMenu.oldClassName = oOptionMenu.className; oOptionMenu.onmouseover = function(oEvent) { // oEvent = oEvent ? oEvent : event; oOptionMenu.className = oOptionMenu.oldClassName + "Hover"; // Seulement si le menu n'est pas desactive // La norme indique que les elements sont retournes dans l'ordre => On demand le premier donc [0] var tabLiens = oOptionMenu.getElementsByTagName("a"); if (!(tabLiens && (bIE ? tabLiens[0].disabled : tabLiens[0].attributes.getNamedItem("disabled")))) { clWDUtil.SetDisplay(oSousMenu, true); } }; oOptionMenu.onmouseout = function(oEvent) { // Pas de traitement de oEvent pour IE/autres : on ne l'utilise pas ici oOptionMenu.className = oOptionMenu.oldClassName; clWDUtil.SetDisplay(oSousMenu, false); }; }; // Ajoute les fonctions JS en survol pour une option sans sous menu WDMenu.prototype.AjouteJSSurvol_Simple = function AjouteJSSurvol_Simple(oOptionMenu) { // Sauve la classe normale de l'option oOptionMenu.oldClassName = oOptionMenu.className; // Pas de traitement de oEvent pour IE/autres : on ne l'utilise pas ici oOptionMenu.onmouseover = function(oEvent) { oOptionMenu.className = oOptionMenu.oldClassName + "Hover"; }; oOptionMenu.onmouseout = function(oEvent) { oOptionMenu.className = oOptionMenu.oldClassName; }; }; // Execute le clic sur le fond d'une option WDMenu.prototype.OnClick = function OnClick(oEvent) { // Filtre les clics qui sont sur la zone du lien var oSource = clWDUtil.oGetOriginalTarget(oEvent); // On ne fait l'action que si le clic n'est pas sur la zone du lien // Avec certaines version de firefox, on recoit la balise texte a l'interieur du lien if (!oSource || clWDUtil.bBaliseEstTag(oSource, "a") || (oSource.parentNode && clWDUtil.bBaliseEstTag(oSource.parentNode, "a"))) { return; } // On trouve maintenant l'action en consultant le href du lien var oTR = oSource while (oTR && clWDUtil.bBaliseEstTag(oTR, "tr")) { // Ne remonte pas jusqu'au document if (oTR == document.body) { return; } oTR = oTR.parentNode; } // Recupere la balise A var tabA = oTR.getElementsByTagName("a"); if (tabA && tabA.length && tabA[0]) { var sAction = tabA[0].href; if (sAction && sAction.length) { if (sAction.substring(0, "javascript:".length) == "javascript:") { sAction = sAction.substring("javascript:".length); } eval(sAction); } } };