page.xsl 7.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?xml version="1.0"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common"
  exclude-result-prefixes="xsl exsl"
  version="1.0">

  <!-- The sitemap.html.in page contains the master navigation structure -->
  <xsl:variable name="sitemap" select="document('sitemap.html.in')/html/body/div[@id='sitemap']"/>

  <!-- This processes the sitemap to form a context sensitive
       navigation menu for the current page -->
  <xsl:template match="ul" mode="menu">
    <xsl:param name="pagename"/>
    <xsl:param name="level"/>
    <ul class="{concat('l', $level)}">
      <xsl:for-each select="li">
18 19
        <!-- The extra div tag here works around an IE6 whitespace collapsing problem -->
        <li><div>
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
          <!-- A menu is active if there is an 'a' tag with
               a href matching this pagename at this level
               or a child menu -->
          <xsl:variable name="class">
            <xsl:choose>
              <xsl:when test="count(.//a[@href = $pagename]) > 0">
                <xsl:text>active</xsl:text>
              </xsl:when>
              <xsl:otherwise>
                <xsl:text>inactive</xsl:text>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <!-- A menu should use a 'span' instead of 'a' if
               the immediate 'a' tag has href matching the
               current pagename -->
          <xsl:choose>
            <xsl:when test="$pagename = a/@href">
              <span class="{$class}"><xsl:value-of select="a"/></span>
            </xsl:when>
D
Daniel P. Berrange 已提交
41 42 43
            <xsl:when test="a/@href = 'http://wiki.libvirt.org'">
              <a title="{./span}" class="{$class}" href="{a/@href}"><xsl:value-of select="a"/></a>
            </xsl:when>
44 45 46 47 48 49 50 51 52 53 54 55 56
            <xsl:otherwise>
              <a title="{./span}" class="{$class}" href="{concat($href_base, a/@href)}"><xsl:value-of select="a"/></a>
            </xsl:otherwise>
          </xsl:choose>

          <!-- A sub-menu should only be expanded it contains
               an 'a' tag with href matching this pagename -->
          <xsl:if test="count(.//a[@href = $pagename]) > 0">
            <xsl:apply-templates select="ul" mode="menu">
              <xsl:with-param name="pagename" select="$pagename"/>
              <xsl:with-param name="level" select="$level + 1"/>
            </xsl:apply-templates>
          </xsl:if>
57
        </div></li>
58 59 60 61
      </xsl:for-each>
    </ul>
  </xsl:template>

62 63 64
  <xsl:template name="toc">
    <ul>
      <xsl:for-each select="/html/body/h2[count(a) = 1]">
D
Daniel P. Berrange 已提交
65
        <xsl:variable name="thish2" select="."/>
66 67
        <li>
          <a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
D
Daniel P. Berrange 已提交
68
          <xsl:if test="count(./following-sibling::h3[preceding-sibling::h2[1] = $thish2 and count(a) = 1]) > 0">
69
            <ul>
D
Daniel P. Berrange 已提交
70 71
              <xsl:for-each select="./following-sibling::h3[preceding-sibling::h2[1] = $thish2 and count(a) = 1]">
                <xsl:variable name="thish3" select="."/>
72 73
                <li>
                  <a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
D
Daniel P. Berrange 已提交
74
                  <xsl:if test="count(./following-sibling::h4[preceding-sibling::h3[1] = $thish3 and count(a) = 1]) > 0">
75
                    <ul>
D
Daniel P. Berrange 已提交
76 77
                      <xsl:for-each select="./following-sibling::h4[preceding-sibling::h3[1] = $thish3 and count(a) = 1]">
                        <xsl:variable name="thish4" select="."/>
78 79
                        <li>
                          <a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
D
Daniel P. Berrange 已提交
80
                          <xsl:if test="count(./following-sibling::h5[preceding-sibling::h4[1] = $thish4 and count(a) = 1]) > 0">
81
                            <ul>
D
Daniel P. Berrange 已提交
82 83
                              <xsl:for-each select="./following-sibling::h5[preceding-sibling::h4[1] = $thish4 and count(a) = 1]">
                                <xsl:variable name="thish5" select="."/>
84 85
                                <li>
                                  <a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
D
Daniel P. Berrange 已提交
86
                                  <xsl:if test="count(./following-sibling::h6[preceding-sibling::h5[1] = $thish5 and count(a) = 1]) > 0">
87
                                    <ul>
D
Daniel P. Berrange 已提交
88
                                      <xsl:for-each select="./following-sibling::h6[preceding-sibling::h5[1] = $thish5 and count(a) = 1]">
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
                                        <li>
                                          <a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
                                        </li>
                                      </xsl:for-each>
                                    </ul>
                                  </xsl:if>
                                </li>
                              </xsl:for-each>
                            </ul>
                          </xsl:if>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </xsl:if>
                </li>
              </xsl:for-each>
            </ul>
          </xsl:if>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>

112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
  <!-- This is the master page structure -->
  <xsl:template match="/" mode="page">
    <xsl:param name="pagename"/>
    <html>
      <xsl:comment>
        This file is autogenerated from <xsl:value-of select="$pagename"/>.in
        Do not edit this file. Changes will be lost.
      </xsl:comment>
      <head>
        <link rel="stylesheet" type="text/css" href="{$href_base}main.css"/>
        <link rel="SHORTCUT ICON" href="{$href_base}32favicon.png"/>
        <title>libvirt: <xsl:value-of select="html/body/h1"/></title>
        <meta name="description" content="libvirt, virtualization, virtualization API"/>
      </head>
      <body>
        <div id="header">
          <div id="headerLogo"/>
          <div id="headerSearch">
            <form action="{$href_base}search.php" enctype="application/x-www-form-urlencoded" method="get">
131 132 133 134
              <div>
                <input id="query" name="query" type="text" size="12" value=""/>
                <input id="submit" name="submit" type="submit" value="Search"/>
              </div>
135 136 137 138 139 140 141 142 143 144
            </form>
          </div>
        </div>
        <div id="body">
          <div id="menu">
            <xsl:apply-templates select="exsl:node-set($sitemap)/ul" mode="menu">
              <xsl:with-param name="pagename" select="$pagename"/>
              <xsl:with-param name="level" select="0"/>
            </xsl:apply-templates>
          </div>
145
          <div id="content">
146 147 148 149 150 151 152 153 154 155
            <xsl:for-each select="html/body/*">
              <xsl:choose>
                <xsl:when test="name() = 'ul' and @id = 'toc'">
                  <xsl:call-template name="toc"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:copy-of select="."/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:for-each>
156
          </div>
157 158
        </div>
        <div id="footer">
D
Daniel Veillard 已提交
159 160
          <p id="sponsor">
	    Sponsored by:<br/>
161
            <a href="http://et.redhat.com/"><img src="{$href_base}et.png" alt="Project sponsored by Red Hat Emerging Technology"/></a>
162 163 164 165 166 167 168
          </p>
        </div>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>