1 <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 2 <xsl:output method="html" encoding="UTF-8"/> 3 <xsl:key name="cat" match="category" use="@name"/> 4 <xsl:template match="/"> 5 <xsl:for-each select="site"> 6 <html> 7 <head> 8 <title>update-site</title> 9 <style>@import url("web/site.css");</style> 10 </head> 11 <body> 12 <h1 class="title">update-site</h1> 13 <p class="bodyText"><xsl:value-of select="description"/></p> 14 <table width="100%" border="0" cellspacing="1" cellpadding="2"> 15 <xsl:for-each select="category-def"> 16 <xsl:sort select="@label" order="ascending" case-order="upper-first"/> 17 <xsl:sort select="@name" order="ascending" case-order="upper-first"/> 18 <xsl:if test="count(key('cat',@name)) != 0"> 19 <tr class="header"> 20 <td class="sub-header" width="30%"> 21 <xsl:value-of select="@name"/> 22 </td> 23 <td class="sub-header" width="70%"> 24 <xsl:value-of select="@label"/> 25 </td> 26 </tr> 27 <xsl:for-each select="key('cat',@name)"> 28 <xsl:sort select="ancestor::feature//@version" order="ascending"/> 29 <xsl:sort select="ancestor::feature//@id" order="ascending" case-order="upper-first"/> 30 <tr> 31 <xsl:choose> 32 <xsl:when test="(position() mod 2 = 1)"> 33 <xsl:attribute name="class">dark-row</xsl:attribute> 34 </xsl:when> 35 <xsl:otherwise> 36 <xsl:attribute name="class">light-row</xsl:attribute> 37 </xsl:otherwise> 38 </xsl:choose> 39 <td class="log-text" id="indent"> 40 <xsl:choose> 41 <xsl:when test="ancestor::feature//@label"> 42 <a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@label"/></a> 43 <br/> 44 <div id="indent"> 45 (<xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/>) 46 </div> 47 </xsl:when> 48 <xsl:otherwise> 49 <a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/></a> 50 </xsl:otherwise> 51 </xsl:choose> 52 <br /> 53 </td> 54 <td> 55 <table> 56 <xsl:if test="ancestor::feature//@os"> 57 <tr><td class="log-text" id="indent">Operating Systems:</td> 58 <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@os"/></td> 59 </tr> 60 </xsl:if> 61 <xsl:if test="ancestor::feature//@ws"> 62 <tr><td class="log-text" id="indent">Windows Systems:</td> 63 <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@ws"/></td> 64 </tr> 65 </xsl:if> 66 <xsl:if test="ancestor::feature//@nl"> 67 <tr><td class="log-text" id="indent">Languages:</td> 68 <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@nl"/></td> 69 </tr> 70 </xsl:if> 71 <xsl:if test="ancestor::feature//@arch"> 72 <tr><td class="log-text" id="indent">Architecture:</td> 73 <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@arch"/></td> 74 </tr> 75 </xsl:if> 76 </table> 77 </td> 78 </tr> 79 </xsl:for-each> 80 <tr><td class="spacer"><br/></td><td class="spacer"><br/></td></tr> 81 </xsl:if> 82 </xsl:for-each> 83 <xsl:if test="count(feature) > count(feature/category)"> 84 <tr class="header"> 85 <td class="sub-header" colspan="2"> 86 Uncategorized 87 </td> 88 </tr> 89 </xsl:if> 90 <xsl:choose> 91 <xsl:when test="function-available('msxsl:node-set')"> 92 <xsl:variable name="rtf-nodes"> 93 <xsl:for-each select="feature[not(category)]"> 94 <xsl:sort select="@id" order="ascending" case-order="upper-first"/> 95 <xsl:sort select="@version" order="ascending" /> 96 <xsl:value-of select="."/> 97 <xsl:copy-of select="." /> 98 </xsl:for-each> 99 </xsl:variable> 100 <xsl:variable name="myNodeSet" select="msxsl:node-set($rtf-nodes)/*"/> 101 <xsl:for-each select="$myNodeSet"> 102 <tr> 103 <xsl:choose> 104 <xsl:when test="position() mod 2 = 1"> 105 <xsl:attribute name="class">dark-row</xsl:attribute> 106 </xsl:when> 107 <xsl:otherwise> 108 <xsl:attribute name="class">light-row</xsl:attribute> 109 </xsl:otherwise> 110 </xsl:choose> 111 <td class="log-text" id="indent"> 112 <xsl:choose> 113 <xsl:when test="@label"> 114 <a href="{@url}"><xsl:value-of select="@label"/></a> 115 <br /> 116 <div id="indent"> 117 (<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>) 118 </div> 119 </xsl:when> 120 <xsl:otherwise> 121 <a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a> 122 </xsl:otherwise> 123 </xsl:choose> 124 <br /><br /> 125 </td> 126 <td> 127 <table> 128 <xsl:if test="@os"> 129 <tr><td class="log-text" id="indent">Operating Systems:</td> 130 <td class="log-text" id="indent"><xsl:value-of select="@os"/></td> 131 </tr> 132 </xsl:if> 133 <xsl:if test="@ws"> 134 <tr><td class="log-text" id="indent">Windows Systems:</td> 135 <td class="log-text" id="indent"><xsl:value-of select="@ws"/></td> 136 </tr> 137 </xsl:if> 138 <xsl:if test="@nl"> 139 <tr><td class="log-text" id="indent">Languages:</td> 140 <td class="log-text" id="indent"><xsl:value-of select="@nl"/></td> 141 </tr> 142 </xsl:if> 143 <xsl:if test="@arch"> 144 <tr><td class="log-text" id="indent">Architecture:</td> 145 <td class="log-text" id="indent"><xsl:value-of select="@arch"/></td> 146 </tr> 147 </xsl:if> 148 </table> 149 </td> 150 </tr> 151 </xsl:for-each> 152 </xsl:when> 153 <xsl:otherwise> 154 <xsl:for-each select="feature[not(category)]"> 155 <xsl:sort select="@id" order="ascending" case-order="upper-first"/> 156 <xsl:sort select="@version" order="ascending" /> 157 <tr> 158 <xsl:choose> 159 <xsl:when test="count(preceding-sibling::feature[not(category)]) mod 2 = 1"> 160 <xsl:attribute name="class">dark-row</xsl:attribute> 161 </xsl:when> 162 <xsl:otherwise> 163 <xsl:attribute name="class">light-row</xsl:attribute> 164 </xsl:otherwise> 165 </xsl:choose> 166 <td class="log-text" id="indent"> 167 <xsl:choose> 168 <xsl:when test="@label"> 169 <a href="{@url}"><xsl:value-of select="@label"/></a> 170 <br /> 171 <div id="indent"> 172 (<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>) 173 </div> 174 </xsl:when> 175 <xsl:otherwise> 176 <a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a> 177 </xsl:otherwise> 178 </xsl:choose> 179 <br /><br /> 180 </td> 181 <td> 182 <table> 183 <xsl:if test="@os"> 184 <tr><td class="log-text" id="indent">Operating Systems:</td> 185 <td class="log-text" id="indent"><xsl:value-of select="@os"/></td> 186 </tr> 187 </xsl:if> 188 <xsl:if test="@ws"> 189 <tr><td class="log-text" id="indent">Windows Systems:</td> 190 <td class="log-text" id="indent"><xsl:value-of select="@ws"/></td> 191 </tr> 192 </xsl:if> 193 <xsl:if test="@nl"> 194 <tr><td class="log-text" id="indent">Languages:</td> 195 <td class="log-text" id="indent"><xsl:value-of select="@nl"/></td> 196 </tr> 197 </xsl:if> 198 <xsl:if test="@arch"> 199 <tr><td class="log-text" id="indent">Architecture:</td> 200 <td class="log-text" id="indent"><xsl:value-of select="@arch"/></td> 201 </tr> 202 </xsl:if> 203 </table> 204 </td> 205 </tr> 206 </xsl:for-each> 207 </xsl:otherwise> 208 </xsl:choose> 209 </table> 210 </body> 211 </html> 212 </xsl:for-each> 213 </xsl:template> 214 </xsl:stylesheet> 215