You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
10 KiB
330 lines
10 KiB
<?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>
|