summary refs log tree commit diff
path: root/nixos/lib/test-driver/log2html.xsl
blob: 0485412b4c8eab0e3cc3d9d37699d1dafb350aed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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>