<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" /> <xsl:template match="logfile"> <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="jquery-ui.min.js"></script> <script type="text/javascript" src="treebits.js" /> <link rel="stylesheet" href="logfile.css" type="text/css" /> <title>Log File</title> </head> <body> <h1>VM build log</h1> <p> <a href="javascript:" class="logTreeExpandAll">Expand all</a> | <a href="javascript:" class="logTreeCollapseAll">Collapse all</a> </p> <ul class='toplevel'> <xsl:for-each select='line|nest'> <li> <xsl:apply-templates select='.'/> </li> </xsl:for-each> </ul> <xsl:if test=".//*[@image]"> <h1>Screenshots</h1> <ul class="vmScreenshots"> <xsl:for-each select='.//*[@image]'> <li><a href="{@image}"><xsl:value-of select="@image" /></a></li> </xsl:for-each> </ul> </xsl:if> </body> </html> </xsl:template> <xsl:template match="nest"> <!-- The tree should be collapsed by default if all children are unimportant or if the header is unimportant. --> <xsl:variable name="collapsed" select="not(./head[@expanded]) and count(.//*[@error]) = 0"/> <xsl:variable name="style"><xsl:if test="$collapsed">display: none;</xsl:if></xsl:variable> <xsl:if test="line|nest"> <a href="javascript:" class="logTreeToggle"> <xsl:choose> <xsl:when test="$collapsed"><xsl:text>+</xsl:text></xsl:when> <xsl:otherwise><xsl:text>-</xsl:text></xsl:otherwise> </xsl:choose> </a> <xsl:text> </xsl:text> </xsl:if> <xsl:apply-templates select='head'/> <!-- Be careful to only generate <ul>s if there are <li>s, otherwise it’s malformed. --> <xsl:if test="line|nest"> <ul class='nesting' style="{$style}"> <xsl:for-each select='line|nest'> <!-- Is this the last line? If so, mark it as such so that it can be rendered differently. --> <xsl:variable name="class"><xsl:choose><xsl:when test="position() != last()">line</xsl:when><xsl:otherwise>lastline</xsl:otherwise></xsl:choose></xsl:variable> <li class='{$class}'> <span class='lineconn' /> <span class='linebody'> <xsl:apply-templates select='.'/> </span> </li> </xsl:for-each> </ul> </xsl:if> </xsl:template> <xsl:template match="head|line"> <code> <xsl:if test="@error"> <xsl:attribute name="class">errorLine</xsl:attribute> </xsl:if> <xsl:if test="@warning"> <xsl:attribute name="class">warningLine</xsl:attribute> </xsl:if> <xsl:if test="@priority = 3"> <xsl:attribute name="class">prio3</xsl:attribute> </xsl:if> <xsl:if test="@type = 'serial'"> <xsl:attribute name="class">serial</xsl:attribute> </xsl:if> <xsl:if test="@machine"> <xsl:choose> <xsl:when test="@type = 'serial'"> <span class="machine"><xsl:value-of select="@machine"/># </span> </xsl:when> <xsl:otherwise> <span class="machine"><xsl:value-of select="@machine"/>: </span> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:choose> <xsl:when test="@image"> <a href="{@image}"><xsl:apply-templates/></a> </xsl:when> <xsl:otherwise> <xsl:apply-templates/> </xsl:otherwise> </xsl:choose> </code> </xsl:template> <xsl:template match="storeref"> <em class='storeref'> <span class='popup'><xsl:apply-templates/></span> <span class='elided'>/...</span><xsl:apply-templates select='name'/><xsl:apply-templates select='path'/> </em> </xsl:template> </xsl:stylesheet>