xsl-list
[Top] [All Lists]

RE: Efficient Templating - Concise Template Design

2005-02-21 03:49:18
 

-----Original Message-----
From: Adam J Knight [mailto:adam(_at_)brightidea(_dot_)com(_dot_)au] 
Sent: 21 February 2005 10:02
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Efficient Templating - Concise Template Design

Hi guys,

 

I have created the template below (a part of my first ever complete
stylesheet). To me it seems a little long winded, and I 
wonder if it could
be put more concisely. Be a better example of template design.


If we take your logic starting at
<xsl:when test="@id = $id or descendant::tree_node/@id = $id">

you seem to have three conditions

A: @id = $id
B: descendant::tree_node/@id = $id
C: $node = 'collapse'

and the decision table is

A   B   C   node     gif

y   ?   y   expand   close
y   ?   n   collapse open
n   y   ?   collapse open
n   n   ?   expand   close

which translates into

if ((A and C) or (not(A) and not(B))) 
  then (expand;open)
  else (collapse;close)

I might not have read your logic carefully enough, of course. But it seems
to be essentially a question of simplifying the boolean logic, nothing
specific to XSLT.

Michael Kay
http://www.saxonica.com/ 



<xsl:template match="tree_node">

  <tr>
     <td>
       <table width="100%">
         <tr>
          <td align="right" 
width="{(count(ancestor-or-self::*) - 1) * 20}">
          <xsl:choose>
           <xsl:when test="child::tree_node">
            <xsl:choose>
             <xsl:when test="@id = $id or 
descendant::tree_node/@id = $id">
              <xsl:choose>
               <xsl:when test="@id = $id">
                 <xsl:choose>
                   <xsl:when test="$node = 'collapse'">
                    <a href="{$url}&amp;id={(_at_)id}&amp;node=expand">
<img border="0" width="16" height="16" 
src="images/ui_tree/book_close.gif"/>
                   </a>
                   </xsl:when>
                   <xsl:otherwise>
                    <a href="{$url}&amp;id={(_at_)id}&amp;node=collapse">
 <img border="0" width="16" height="16" 
src="images/ui_tree/book_open.gif"/>
                   </a>
                   </xsl:otherwise>
                 </xsl:choose>    
               </xsl:when>
               <xsl:otherwise>
                 <a href="{$url}&amp;id={(_at_)id}&amp;node=collapse">
<img border="0" width="16" height="16" 
src="images/ui_tree/book_open.gif"/>
                 </a>
               </xsl:otherwise>
             </xsl:choose>
           </xsl:when>
           <xsl:otherwise>
             <a href="{$url}&amp;id={(_at_)id}&amp;node=expand">
<img border="0" width="16" height="16" 
src="images/ui_tree/book_close.gif"/>
             </a>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:when>
      <xsl:otherwise>
<img border="0" width="16" height="16" 
src="images/ui_tree/paper.gif"/>
      </xsl:otherwise>
    </xsl:choose>
    </td>
    <td>
      <a href="{$url}&amp;page={(_at_)id}">
        <xsl:value-of select="@value"/>
      </a>
    </td>
    <td align="right" width="5%">
      <a href="{$url}&amp;action=edit&amp;node={(_at_)id}">edit</a>
    </td>
    <td align="right" width="5%">
      <a href="{$url}&amp;action=delete&amp;node={(_at_)id}" 
onClick="return
deleteConfirm();">delete</a>
    </td>
  </tr>
</table>
</td>
</tr> 
</xsl:template>

Cheers, 

Adam 

 



Cheers, 
Adam 
 
NB: "Pray as if everything depended upon God and work as if everything
depended upon man."



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>