<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" xmlns="http://www.w3.org/1999/xhtml" /> <xsl:template match="/CoverageReport"> <html lang="en" xml:lang="en"> <head> <title>Coverage report</title> <style type="text/css"> <xsl:text disable-output-escaping="yes"> .progressbar .percent.excelent { background-color: green; } #tree .element.good > .name, .progressbar .percent.good, .demo .good { background-color: greenyellow; } #tree .element.nice > .name, .progressbar .percent.nice, .demo .nice { background-color: yellow; } #tree .element.bad > .name, .progressbar .percent.bad, .demo .bad { background-color: orange; } #tree .element.critical > .name, .progressbar .percent.critical, .demo .critical { background-color: orangeRed; } #tree .element input:checked ~ .children { display: block !important; } #tree .element input ~ .children { display: none; } table, table td { border-width: 1px; border-style: solid dotted solid dotted; border-color: silver; border-collapse: collapse; padding-left: 0.2em; padding-right: 0.2em; } .progressbar { width: 20em; } .progressbar .percent { display: inline-block; height: 0.5em; vertical-align: middle; } div.description:nth-of-type(2n+1) { background-color: whitesmoke; } tr:hover { background-color: lightyellow; } </xsl:text> </style> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> <h1>Coverage report</h1> <h2>Summary</h2> <table class="summary"> <xsl:apply-templates select=".|*" mode="summary" /> </table> <h2>Legend</h2> <p>Colors correspond to:</p> <table class="demo"> <xsl:call-template name="legend-color"> <xsl:with-param name="coverage">100</xsl:with-param> <xsl:with-param name="description">Full coverage</xsl:with-param> </xsl:call-template> <xsl:call-template name="legend-color"> <xsl:with-param name="coverage">75</xsl:with-param> <xsl:with-param name="description"> <xsl:text>75%-99% coverage, nice</xsl:text> </xsl:with-param> </xsl:call-template> <xsl:call-template name="legend-color"> <xsl:with-param name="coverage">50</xsl:with-param> <xsl:with-param name="description">Half the way !</xsl:with-param> </xsl:call-template> <xsl:call-template name="legend-color"> <xsl:with-param name="coverage">0</xsl:with-param> <xsl:with-param name="description">Forgot something ?</xsl:with-param> </xsl:call-template> </table> <h2>Tree</h2> <!-- Warning IE conditional comment. A warning is displayed if using IE, as the tree view has been reported not to work on IE7. ("<!" == "<") --> <xsl:comment> <xsl:text>[if IE]> <span class="warning" style="background-color: red;font-weight:bold;" > This tree representation has been reported not to work on IE. Please use a navigator that respect standards. </span> <![endif]</xsl:text> </xsl:comment> <p>Check/Uncheck the checkboxes to fold/unfold.</p> <ul class="tree" id="tree"> <xsl:apply-templates select="." mode="tree" /> </ul> <h2>Description</h2> <div class="descriptions"> <xsl:apply-templates select=".|descendant::*" mode="description" /> </div> </body> </html> </xsl:template> <!--############## summary templates ##############--> <xsl:template mode="summary" match="*"> <tr> <td> <a href="#description-{generate-id(.)}"> <xsl:apply-templates select="." mode="summary-name" /> </a> </td> <td><xsl:value-of select="@Coverage" /></td> <xsl:apply-templates select="." mode="progress-bar" /> </tr> </xsl:template> <xsl:template mode="summary-name" match="/*" > <xsl:text>Coverage total average</xsl:text> </xsl:template> <xsl:template mode="summary-name" match="*"> <xsl:value-of select="name()" /> </xsl:template> <xsl:template name="legend-color"> <xsl:param name="coverage" /> <xsl:param name="description" /> <tr> <td class="coverage"> <xsl:attribute name="class"> <xsl:call-template name="choose-quality"> <xsl:with-param name="coverage"> <xsl:value-of select="$coverage" /> </xsl:with-param> </xsl:call-template> </xsl:attribute> <xsl:value-of select="$coverage" /> </td> <td class="coverage"> <xsl:value-of select="$description" /> </td> </tr> </xsl:template> <!-- quality coverage templates --> <xsl:template name="quality"> <xsl:call-template name="choose-quality"> <xsl:with-param name="coverage"> <xsl:value-of select="number(substring-before(@Coverage,'%'))" /> </xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="choose-quality"> <xsl:param name="coverage" /> <xsl:choose> <xsl:when test="$coverage >= 100">excelent</xsl:when> <xsl:when test="$coverage >= 75">nice</xsl:when> <xsl:when test="$coverage >= 50">bad</xsl:when> <xsl:when test="$coverage >= 0">critical</xsl:when> <xsl:otherwise /> </xsl:choose> </xsl:template> <!--############## Tree templates ##############--> <!-- Ignore the CriterionState nodes and childrens as it add a huge number of unimportant info--> <xsl:template mode="tree" match="CriterionStates" /> <xsl:template mode="tree" match="*"> <li id="tree-{generate-id(.)}"> <xsl:attribute name="class"> <xsl:text>element </xsl:text> <xsl:call-template name="quality" /> </xsl:attribute> <xsl:apply-templates select="." mode="tree-checkbox" /> <a class="name description" href="#description-{generate-id(.)}"> <xsl:value-of select="@Name" /> </a> <xsl:if test="node()"> <ul class="children"><xsl:apply-templates select="*" mode="tree" /></ul> </xsl:if> </li> </xsl:template> <xsl:template mode="tree-checkbox" match="ConfigurableDomain | Criterion"> <input class="description" type="checkbox" /> </xsl:template> <xsl:template mode="tree-checkbox" match="Domains | Criteria"> <input class="description" type="checkbox" checked="checked" /> </xsl:template> <xsl:template mode="tree-checkbox" match="*" /> <!--#################### Description templates ####################--> <!-- Ignore the CriterionState nodes and childrens as it add a huge number of unimportant info--> <xsl:template mode="description" match="CriterionStates|CriterionStates//*" /> <xsl:template mode="description" match="*"> <div class="description"> <h3 id="description-{generate-id(.)}"> <xsl:value-of select="@Name" /> </h3> <p> <xsl:text>Path:</xsl:text> <xsl:apply-templates select="ancestor::*|." mode="path" /> </p> <a class="name" href="#tree-{generate-id(.)}"> <xsl:text>Back to tree</xsl:text> </a> <h4>Detail</h4> <table> <xsl:if test="parent::*"> <tr> <td>Type</td> <td><xsl:value-of select="name()" /></td> </tr> <tr> <td>Parent</td> <td> <a class="name" href="#description-{generate-id(..)}"> <xsl:value-of select="../@Name" /> </a> <xsl:text> (</xsl:text> <xsl:value-of select="name(..)" /> <xsl:text>)</xsl:text> </td> </tr> </xsl:if> <xsl:apply-templates select="./@*" mode="description" /> </table> <xsl:if test="node()"> <h4>Children</h4> <table> <tr> <th>Name</th> <th>Type</th> <th>Coverage</th> <th>Nb use</th> <th>Coverage progress bar</th> </tr> <xsl:apply-templates select="*" mode="description-children" /> </table> </xsl:if> </div> </xsl:template> <xsl:template mode="path" match="*"> <xsl:text> / </xsl:text> <a href="#description-{generate-id(.)}"><xsl:value-of select="@Name" /></a> </xsl:template> <xsl:template match="@*" mode="description"> <tr> <td><xsl:value-of select="name()" /></td> <td><xsl:value-of select="." /></td> </tr> </xsl:template> <!-- Ignore the CriterionState nodes as it add a huge number of unimportant info--> <xsl:template mode="description-children" match="CriterionStates" /> <xsl:template mode="description-children" match="*"> <tr> <td><a class="name" href="#description-{generate-id(.)}"> <xsl:value-of select="@Name" /> </a></td> <td><xsl:value-of select="name()" /></td> <xsl:apply-templates select="./@*" mode="description-children" /> <xsl:apply-templates select="." mode="progress-bar" /> </tr> </xsl:template> <xsl:template match="@Name" mode="description-children" /> <xsl:template match="@*" mode="description-children"> <td><xsl:value-of select="." /></td> </xsl:template> <xsl:template mode="progress-bar" match="*"> <td class="progressbar"> <span style="width:{@Coverage}"> <xsl:attribute name="class"> <xsl:text>percent </xsl:text> <xsl:call-template name="quality" /> </xsl:attribute> </span> </td> </xsl:template> </xsl:stylesheet>