RE: [xsl] Help with tree menu

Subject: RE: [xsl] Help with tree menu
From: Lucas Gonçalves Grossi <lggrossi@xxxxxxxxxx>
Date: Fri, 30 Nov 2007 06:11:26 -0200
I can't do like this, because this code that you put for me can't stay inside
a html tag.
My output is a html. This <h4> is a tag from html, that i use to create the
button from html. I'll put the all the code here. This script is to create the
menu. Then, in the body of the html, I use the xsl language.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html" encoding="UTF-8"/>

<xsl:template match="/">
	<html><head></head>
	<script>
	function ativaSubMenus(quem){
	    var uls = quem.getElementsByTagName('ul')
	    for(var i=0; i&lt;uls.length; i++){
	        uls[i].style.display = 'none';
	    }

	    var h3s = quem.getElementsByTagName('h4')
	    for(i=0; i&lt;h3s.length; i++){
	        h3s[i].style.MozUserSelect = 'none';
	        h3s[i].unselectable = 'on';
	        h3s[i].style.cursor = 'pointer';
	        h3s[i].onclick = function(e){
	            var source = getSource(e);
	            var ulatual = source.parentNode.getElementsByTagName('ul')[0];
	            if(ulatual.style.display=='none'){
	                ulatual.style.display = 'block';
					//aparece(ulatual,'high');
	            }else{
	                ulatual.style.display = 'none';
	            }
	        }
	    }
	}
	/*
	function aparece(quem,speed){
	    var sty = quem.style;
	    sty.visibility = 'hidden'
	    var pos_init = sty.position;
	    sty.position = 'absolute';
	    if(sty.display=='none'){ sty.display = 'block' }
	    var alt_init = parseInt(quem.offsetHeight);
	    var lar_init = parseInt(quem.offsetWidth);
	    var over_ini = sty.overflow;
	    sty.overflow = 'hidden';
	    sty.visibility = 'visible';
	    sty.height = '0px';
	    sty.width = '0px';

	    if(typeof(quem.timeAparece)!='undefined'){
	        clearInterval(quem.timeAparece);
	    }
	    quem.timeAparece=null;

	    var loop = function(){
	        var alt_atu = parseInt(sty.height);
	        var lar_atu = parseInt(sty.width);
	        if(alt_atu &lt; alt_init){
	            sty.height = (alt_atu + 5) + 'px';
	        }
	        if(lar_atu &lt; lar_init){
	            sty.width = (lar_atu + 15) + 'px';
	        }
	        if(alt_atu == 0 ){
	            sty.position = pos_init;
	        }
	        if(alt_atu &gt;= alt_init &amp;&amp; lar_atu &gt;= lar_init){
	            clearInterval(quem.timeAparece);
	            sty.height = (alt_init) + 'px';
	            sty.width = (lar_init) + 'px';
	            sty.overflow = over_ini;
	        }
	    }
	    switch(speed){
	        case 'high': speed = 1; break;
	        case 'normal': speed = 20; break;
	        case 'slow': speed = 40; break;
	        default: speed = 10;
	    }
	    quem.timeAparece = setInterval(loop,speed);
	}
	*/
	function bodyOnReady(func){
	    if(!(document.body==null)){
	        func();
	    }else{
	        var func_rep = func;
	        setTimeout(function(){ bodyOnReady(func_rep) },100);
	    }
	}

	function getSource(evt){
	    if(typeof(evt)=='undefined') var evt=window.event
	    source = evt.target?evt.target:evt.srcElement
	    if(source.nodeType == 3)source = source.parentNode
	    return source;
	}


	bodyOnReady(function(){ ativaSubMenus( document.getElementById('menuzao') )
})
	</script>
	<body>
	<ul id='menuzao'>
	    <li><h4><xsl:value-of select="gqmroot/@titleRoot"/></h4>
	        <ul>
	            <li><xsl:for-each select="gqmroot/goal">
					<h4><xsl:value-of select="@titleGoal"/></h4>
					<ul>
						<li><xsl:for-each select="question">
								<h4><xsl:value-of select="@titleQuestion"/></h4>
							<ul>
								<li><xsl:for-each select="metric">
									<h4>
										<xsl:value-of select="@titleMetric"/>
									</h4>
									<h4>
										<xsl:value-of select="unparsed-text(@ChartLink)"
disable-output-escaping="yes"/>
									</h4>
									</xsl:for-each>
								</li>
							</ul>
							</xsl:for-each>
						</li>
					</ul>
					</xsl:for-each>
		    	</li>
	        </ul>
	    </li>
	</ul>

	</body></html>
</xsl:template>

</xsl:stylesheet>

Thanks,
LUCAS



> I don't have a workstation that is set up with my usual tools today, so I
haven't been able to test this, but try out this stylesheet and let us know if
it does what you want, and if not, explain further.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 	<xsl:template match="/">
> 		<xsl:apply-templates/>
> 	</xsl:template>
>
> 	<xsl:template match="gqmroot">
> 		<xsl:apply-templates/>
> 	</xsl:template>
>
> 	<xsl:template match="goal">
> 		<h4><xsl:value-of select="@titleGoal"/></h4>
> 			<ul>
> 				<xsl:apply-templates/>
> 			</ul>
> 	</xsl:template>
>
> 	<xsl:template match="question">
> 		<li>
> 			<h4><xsl:value-of select="@titleQuestion"/></h4>
> 			<ul>
> 				<xsl:apply-templates />
> 			</ul>
> 		</li>
> 	</xsl:template>
>
> 	<xsl:template match="metric">
>            <li>
> 		<h4><xsl:value-of select="@titleMetric"/></h4>
> 		 <h4><xsl:value-of select="unparsed-text(@ChartLink)"
disable-output-escaping="yes"/></h4>
>                 </h4>
>            </li>
> 	</xsl:template>
>
> </xsl:stylesheet>
> --
> Charles Knell
> cknell@xxxxxxxxxx - email
>
>
>
> -----Original Message-----
> From:     Lucas Gongalves Grossi <lggrossi@xxxxxxxxxx>
> Sent:     Thu, 29 Nov 2007 17:41:59 -0200
> To:       "xsl-list" <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Subject:  [xsl] Help with tree menu
>
> > Hello everybody,
> >
> > I'm having a problem in my XSL code. My XSL file get an xml as input and
derives an html. In the output html I'm trying to do a tree menu, and the <h4>
html tag is the initializator of the button in menu, i.e. when I click in this
button, the menu open, like this "+" of xml.
> > The problem is that, as the h4 is after the for-each, it's appearing just
in the first value. So, the menu is ok (open) just for the first value. Ex:
> > goal
> > +question1
> > +question2
> > If I click on question 1, open or close his submenu. If i click on
question 2, should appear his submenu, but it open or close the menu of
question 1 too.
> > Can anybody help me? Thanks a lot.
> >
> > <xsl:for-each select="gqmroot/goal">
> > <h4><xsl:value-of select="@titleGoal"/></h4>
> > <ul>
> > <li><xsl:for-each select="question">
> > <h4><xsl:value-of select="@titleQuestion"/></h4>
> > <ul>
> > <li><xsl:for-each select="metric">
> > <h4><xsl:value-of select="@titleMetric"/></h4>
> > <h4>
> > <xsl:value-of select="unparsed-text(@ChartLink)"
disable-output-escaping="yes"/>
> > </h4>
> > </xsl:for-each>
> > </li>
> > </ul>
> > </xsl:for-each>
> > </li>
> > </ul>
> > </xsl:for-each>
> >
>
> My xml file:
> <?xml version="1.0" encoding="UTF-8"?>
>
> <?xml-stylesheet type="text/xsl" href="F-GESGQM.xsl"?>
> <!-- New document created at Thu Oct 18 08:53:18 CEST 2007 -->
>
> <gqmroot titleRoot="F-GES GQM">
> <goal titleGoal="G.1. Aumento della qualit` esterna">
> <question titleQuestion="Q.1.1. Quanti bug trova l?utente? Quanti sono ad
alta priorit`?">
> <metric
> titleMetric="M.1.1.1. Numero di bug riportati nell'intervallo di tempo
considerato, divisi per centro di costo e per prodotto."
> ChartLink="gesGQMReport_M111.html">
> </metric>
> <metric
> titleMetric="M.1.1.2. Numero di bug ad alta priorit` riportati dall?utente
al mese, divisi per centro di costo e per prodotto."
> ChartLink="gesGQMReport_M112.html">
> </metric></question>
> <question titleQuestion="Q.1.2. Quanto h soddisfatto l?utente della nuova
release?">
> <metric
> titleMetric="M.1.2.1 Numero di richieste di cambiamento del sistema
nell'intervallo di tempo per quella release"
> ChartLink="gesGQMReport_M121.html">
> </metric>
> <metric
> titleMetric="M.1.2.2. Numero di bug riportati dall'utente nell'intervallo di
tempo facenti riferimento a quella release"
> ChartLink="">
> </metric>
> </question>
> </goal>
> <goal titleGoal="G.2 Aumento della qualit` interna">
> <question titleQuestion="Q.2.1. Qual h la probabilit` che una modifica
introduca un nuovo bug?">
> <metric
> titleMetric="M.2.1.1. Rapporto tra numero di test che falliscono ed il
numero totale di test durante la fase di integrazione notturna"
> ChartLink="">
> </metric></question>
> <question titleQuestion="Q.2.2. Quanto h espressivo il codice?">
> <metric titleMetric="M.2.2.1. Complessit` ciclomatica"
> ChartLink="">
> </metric>
> <metric titleMetric="M.2.2.2. Weighted Methods per Class"
> ChartLink="">
> </metric>
> </question>
> </goal>
> </gqmroot>
>
>
> Thanks,
> LUCAS

Current Thread