aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/lib/test-driver/log2html.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/lib/test-driver/log2html.xsl')
-rw-r--r--nixpkgs/nixos/lib/test-driver/log2html.xsl135
1 files changed, 135 insertions, 0 deletions
diff --git a/nixpkgs/nixos/lib/test-driver/log2html.xsl b/nixpkgs/nixos/lib/test-driver/log2html.xsl
new file mode 100644
index 00000000000..0485412b4c8
--- /dev/null
+++ b/nixpkgs/nixos/lib/test-driver/log2html.xsl
@@ -0,0 +1,135 @@
+<?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>