page.xsl 8.5 KB
Newer Older
J
Juerg Haefliger 已提交
1 2
<?xml version="1.0"?>
<xsl:stylesheet
3 4
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:html="http://www.w3.org/1999/xhtml"
J
Juerg Haefliger 已提交
5 6
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common"
7
  exclude-result-prefixes="xsl exsl html"
J
Juerg Haefliger 已提交
8 9 10
  version="1.0">

  <!-- The sitemap.html.in page contains the master navigation structure -->
11
  <xsl:variable name="sitemap" select="document('sitemap.html.in')/html:html/html:body/html:div[@id='sitemap']"/>
J
Juerg Haefliger 已提交
12 13 14 15 16 17 18 19

  <xsl:template match="node() | @*" mode="content">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" mode="content"/>
    </xsl:copy>
  </xsl:template>


20
  <xsl:template match="html:ul[@id='toc']" mode="content">
J
Juerg Haefliger 已提交
21 22 23
    <xsl:call-template name="toc"/>
  </xsl:template>

24 25 26 27
  <xsl:template match="html:div[@id='include']" mode="content">
    <xsl:call-template name="include"/>
  </xsl:template>

J
Juerg Haefliger 已提交
28 29
  <!-- This processes the sitemap to form a context sensitive
       navigation menu for the current page -->
30
  <xsl:template match="html:ul" mode="menu">
J
Juerg Haefliger 已提交
31 32 33
    <xsl:param name="pagename"/>
    <xsl:param name="level"/>
    <ul class="{concat('l', $level)}">
34
      <xsl:for-each select="html:li">
J
Juerg Haefliger 已提交
35 36 37 38 39 40 41
        <!-- The extra div tag here works around an IE6 whitespace collapsing problem -->
        <li><div>
          <!-- 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>
42
              <xsl:when test="count(.//html:a[@href = $pagename]) > 0">
J
Juerg Haefliger 已提交
43 44 45 46 47 48 49 50 51 52 53 54
                <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>
55 56
            <xsl:when test="$pagename = html:a/@href">
              <span class="{$class}"><xsl:value-of select="html:a"/></span>
J
Juerg Haefliger 已提交
57
            </xsl:when>
58 59
            <xsl:when test="starts-with(html:a/@href, 'http://wiki.libvirt.org')">
              <a title="{./html:span}" class="{$class}" href="{html:a/@href}"><xsl:value-of select="html:a"/></a>
J
Juerg Haefliger 已提交
60 61
            </xsl:when>
            <xsl:otherwise>
62
              <a title="{./html:span}" class="{$class}" href="{concat($href_base, html:a/@href)}"><xsl:value-of select="html:a"/></a>
J
Juerg Haefliger 已提交
63 64 65 66 67
            </xsl:otherwise>
          </xsl:choose>

          <!-- A sub-menu should only be expanded it contains
               an 'a' tag with href matching this pagename -->
68 69
          <xsl:if test="count(.//html:a[@href = $pagename]) > 0">
            <xsl:apply-templates select="html:ul" mode="menu">
J
Juerg Haefliger 已提交
70 71 72 73 74 75 76 77 78 79 80
              <xsl:with-param name="pagename" select="$pagename"/>
              <xsl:with-param name="level" select="$level + 1"/>
            </xsl:apply-templates>
          </xsl:if>
        </div></li>
      </xsl:for-each>
    </ul>
  </xsl:template>

  <xsl:template name="toc">
    <ul>
81
      <xsl:for-each select="/html:html/html:body/html:h2[count(html:a) = 1]">
J
Juerg Haefliger 已提交
82 83
        <xsl:variable name="thish2" select="."/>
        <li>
84
          <a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
85
          <xsl:if test="count(./following-sibling::html:h3[preceding-sibling::html:h2[1] = $thish2 and count(html:a) = 1]) > 0">
J
Juerg Haefliger 已提交
86
            <ul>
87
              <xsl:for-each select="./following-sibling::html:h3[preceding-sibling::html:h2[1] = $thish2 and count(html:a) = 1]">
J
Juerg Haefliger 已提交
88 89
                <xsl:variable name="thish3" select="."/>
                <li>
90 91
                  <a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
                  <xsl:if test="count(./following-sibling::html:h4[preceding-sibling::html:h3[1] = $thish3 and count(html:a) = 1]) > 0">
J
Juerg Haefliger 已提交
92
                    <ul>
93
                      <xsl:for-each select="./following-sibling::html:h4[preceding-sibling::html:h3[1] = $thish3 and count(html:a) = 1]">
J
Juerg Haefliger 已提交
94 95
                        <xsl:variable name="thish4" select="."/>
                        <li>
96
                          <a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
97
                          <xsl:if test="count(./following-sibling::html:h5[preceding-sibling::html:h4[1] = $thish4 and count(html:a) = 1]) > 0">
J
Juerg Haefliger 已提交
98
                            <ul>
99
                              <xsl:for-each select="./following-sibling::html:h5[preceding-sibling::html:h4[1] = $thish4 and count(html:a) = 1]">
J
Juerg Haefliger 已提交
100 101
                                <xsl:variable name="thish5" select="."/>
                                <li>
102
                                  <a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
103
                                  <xsl:if test="count(./following-sibling::html:h6[preceding-sibling::html:h5[1] = $thish5 and count(html:a) = 1]) > 0">
J
Juerg Haefliger 已提交
104
                                    <ul>
105
                                      <xsl:for-each select="./following-sibling::html:h6[preceding-sibling::html:h5[1] = $thish5 and count(html:a) = 1]">
J
Juerg Haefliger 已提交
106
                                        <li>
107
                                          <a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
J
Juerg Haefliger 已提交
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 136 137 138 139
                                        </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>

  <!-- 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"/>
140
        <title>libvirt: <xsl:value-of select="html:html/html:body/html:h1"/></title>
J
Juerg Haefliger 已提交
141 142 143
        <meta name="description" content="libvirt, virtualization, virtualization API"/>
      </head>
      <body>
144 145 146 147 148
        <xsl:if test="html:html/html:body/@class">
          <xsl:attribute name="class">
            <xsl:value-of select="html:html/html:body/@class"/>
          </xsl:attribute>
        </xsl:if>
J
Juerg Haefliger 已提交
149 150
        <div id="body">
          <div id="menu">
151
            <xsl:apply-templates select="exsl:node-set($sitemap)/html:ul" mode="menu">
J
Juerg Haefliger 已提交
152 153 154 155 156
              <xsl:with-param name="pagename" select="$pagename"/>
              <xsl:with-param name="level" select="0"/>
            </xsl:apply-templates>
          </div>
          <div id="content">
157
            <xsl:apply-templates select="/html:html/html:body/*" mode="content"/>
J
Juerg Haefliger 已提交
158 159
          </div>
        </div>
160 161 162 163 164 165 166 167 168 169 170 171 172
        <div id="nav">
          <div id="home">
            <a href="{$href_base}index.html">Home</a>
          </div>
          <div id="search">
            <form action="{$href_base}search.php" enctype="application/x-www-form-urlencoded" method="get">
              <div>
                <input name="query" type="text" size="12" value=""/>
                <input name="submit" type="submit" value="Go"/>
              </div>
            </form>
          </div>
        </div>
J
Juerg Haefliger 已提交
173 174 175 176
      </body>
    </html>
  </xsl:template>

177 178 179 180 181 182 183
  <xsl:template name="include">
    <xsl:variable name="inchtml">
      <xsl:copy-of select="document(@filename)"/>
    </xsl:variable>

    <xsl:apply-templates select="exsl:node-set($inchtml)/html:html/html:body/*" mode="content"/>
  </xsl:template>
184 185

  <xsl:template match="html:h2 | html:h3 | html:h4 | html:h5 | html:h6" mode="content">
186
    <xsl:element name="{name()}">
187 188 189 190 191 192 193 194 195 196 197 198
      <xsl:apply-templates mode="copy" />
      <xsl:if test="./html:a/@name">
        <a class="headerlink" href="#{html:a/@name}" title="Permalink to this headline">&#xb6;</a>
      </xsl:if>
    </xsl:element>
  </xsl:template>

  <xsl:template match="text()" mode="copy">
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="node()" mode="copy">
199
    <xsl:element name="{name()}">
200 201 202 203
      <xsl:copy-of select="./@*"/>
      <xsl:apply-templates mode="copy" />
    </xsl:element>
  </xsl:template>
J
Juerg Haefliger 已提交
204
</xsl:stylesheet>