330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			XML
		
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			XML
		
	
	
	
| <?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>
 |