fsfe-website/fsfeurope.xsl

269 lines
10 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"
doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/REC-html40/loose.dtd"/>
<!-- The top level element of the input file is "buildinfo" -->
<xsl:template match="buildinfo">
<xsl:apply-templates select="node()"/>
</xsl:template>
<!-- The actual HTML tree is in "buildinfo/document" -->
<xsl:template match="buildinfo/document">
<xsl:element name="html">
<xsl:attribute name="lang">
<xsl:value-of select="/buildinfo/@language"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
<!-- HTML head -->
<xsl:template match="head">
<xsl:copy>
<meta name="robots" content="index, follow"/>
<link rel="stylesheet" media="all" href="/fsfeurope.css" type="text/css"/>
<link rel="stylesheet" media="print" href="/print.css" type="text/css"/>
<link rel="icon" href="/graphics/fsfeurope.ico" type="image/x-icon"/>
<link rel="shortcut icon" href="/graphics/fsfeurope.ico" type="image/x-icon"/>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- HTML body -->
<xsl:template match="body">
<xsl:copy>
<!-- First of all, a comment to make clear this is generated -->
<xsl:comment>This file was generated by an XSLT script. Please do not edit.</xsl:comment>
<xsl:element name="div">
<xsl:attribute name="class">page</xsl:attribute>
<xsl:comment>Unnecessary div, for IE only</xsl:comment>
<xsl:element name="a">
<xsl:attribute name="class">n</xsl:attribute>
<xsl:attribute name="id">top</xsl:attribute>
<xsl:attribute name="href">#content</xsl:attribute>
<xsl:text>Skip menu</xsl:text>
</xsl:element>
<xsl:comment>Give non-graphical browsers a way to skip the menu</xsl:comment>
<!-- Menu bar -->
<xsl:element name="div">
<xsl:attribute name="class">menu</xsl:attribute>
<!-- Logo -->
<xsl:element name="div">
<xsl:attribute name="class">logo</xsl:attribute>
<xsl:element name="a">
<xsl:attribute name="class">gl</xsl:attribute>
<xsl:attribute name="href">/</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="alt">[FSFE Logo]</xsl:attribute>
<xsl:attribute name="src">/graphics/logo.png</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<!-- Menu -->
<xsl:for-each select="/buildinfo/menuset/menu[not(@parent)]">
<xsl:sort select="@id"/>
<xsl:variable name="menu"><xsl:value-of select="@id"/></xsl:variable>
<xsl:element name="ul">
<xsl:for-each select="/buildinfo/menuset/menu[@parent=$menu]">
<xsl:sort select="@id"/>
<xsl:variable name="id"><xsl:value-of select="@id"/></xsl:variable>
<xsl:element name="li">
<xsl:choose>
<xsl:when test="not(string(.))">
<xsl:value-of select="/buildinfo/textset/text[@id=$id]"/>
</xsl:when>
<xsl:when test=". = concat(/buildinfo/@filename ,'.html')">
<xsl:value-of select="/buildinfo/textset/text[@id=$id]"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
<xsl:value-of select="/buildinfo/textset/text[@id=$id]"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:for-each select="/buildinfo/menuset/menu[@parent=$id]">
<xsl:sort select="@id" />
<xsl:variable name="mid"><xsl:value-of select="@id"/></xsl:variable>
<xsl:element name="li">
<xsl:attribute name="class">submenu</xsl:attribute>
<xsl:choose>
<xsl:when test=". = concat(/buildinfo/@filename ,'.html')">
<xsl:value-of select="/buildinfo/textset/text[@id=$mid]"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
<xsl:value-of select="/buildinfo/textset/text[@id=$mid]"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
<!-- End Menu bar -->
<!-- Language bar -->
<xsl:element name="div">
<xsl:attribute name="class">language</xsl:attribute>
<!-- Join the Fellowship -->
<xsl:element name="a">
<xsl:attribute name="href">https://www.fsfe.org/join</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="alt">Join the Fellowship!</xsl:attribute>
<xsl:attribute name="src">/graphics/global/Join_Fellowship.png</xsl:attribute>
</xsl:element>
</xsl:element>
<!-- Translation list -->
<xsl:element name="ul">
<xsl:for-each select="/buildinfo/trlist/tr">
<xsl:sort select="@id"/>
<xsl:element name="li">
<xsl:choose>
<xsl:when test="@id=/buildinfo/@language">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="/buildinfo/@filename"/>.<xsl:value-of select="@id"/>.html</xsl:attribute>
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:element>
<!-- Outdated note -->
<xsl:if test="/buildinfo/@outdated='yes'">
<xsl:element name="p">
<xsl:apply-templates select="/buildinfo/textset/text[@id='outdated']/node()" />
</xsl:element>
</xsl:if>
<!-- Missing translation note -->
<xsl:if test="/buildinfo/@language!=/buildinfo/document/@language">
<xsl:element name="p">
<xsl:apply-templates select="/buildinfo/textset/text[@id='notranslation']/node()" />
</xsl:element>
</xsl:if>
</xsl:element>
<!-- End Language bar -->
<!-- Content -->
<xsl:element name="div">
<xsl:attribute name="class">content</xsl:attribute>
<xsl:attribute name="id">content</xsl:attribute>
<!-- Here goes the actual content of the <body> node of the input file -->
<xsl:apply-templates select="node()"/>
<!-- Link to top -->
<xsl:element name="a">
<xsl:attribute name="class">n</xsl:attribute>
<xsl:attribute name="href">#top</xsl:attribute>
<xsl:text>To top</xsl:text>
</xsl:element>
</xsl:element>
<!-- End Content -->
<!-- Footer -->
<xsl:element name="div">
<xsl:attribute name="class">footer</xsl:attribute>
<xsl:element name="p">
<!-- Copyright -->
<xsl:apply-templates select="/buildinfo/textset/text[@id='copyright']/node()"/>
<!-- "Last changed" magic -->
<xsl:variable name="timestamp">
<xsl:value-of select="/buildinfo/document/timestamp"/>
</xsl:variable>
<!-- FIXME: over time, all pages should have the timestamp -->
<!-- tags, so this conditional could be removed -->
<xsl:if test="string-length($timestamp) &gt; 0">
<xsl:variable name="Date">
<xsl:value-of select="substring-before(substring-after($timestamp, 'Date: '), ' $')"/>
</xsl:variable>
<xsl:variable name="Author">
<xsl:value-of select="substring-before(substring-after($timestamp, 'Author: '), ' $')"/>
</xsl:variable>
<xsl:apply-templates select="/buildinfo/textset/text[@id='lastchanged']/node()"/>
<xsl:value-of select="translate ($Date, '/', '-')"/>
(<xsl:value-of select="$Author"/>)
</xsl:if>
<!-- Link to the XHTML source -->
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>/source</xsl:text>
<xsl:value-of select="/buildinfo/@filename"/>
<xsl:text>.</xsl:text>
<xsl:value-of select="/buildinfo/document/@language"/>
<xsl:text>.xhtml</xsl:text>
</xsl:attribute>
<xsl:text>[XHTML]</xsl:text>
</xsl:element>
<!-- Insert the appropriate translation notice -->
<xsl:if test="/buildinfo/document/@language!=/buildinfo/@original">
<xsl:element name="br"/>
<xsl:value-of select="/buildinfo/textset/text[@id='translator1']"/>
<xsl:value-of select="/buildinfo/document/translator"/>
<xsl:value-of select="/buildinfo/textset/text[@id='translator2']"/>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="/buildinfo/@filename"/>
<xsl:text>.en.html</xsl:text>
</xsl:attribute>
<xsl:value-of select="/buildinfo/textset/text[@id='translator3']"/>
</xsl:element>
<xsl:value-of select="/buildinfo/textset/text[@id='translator4']"/>
</xsl:if>
<!-- Permission note -->
<xsl:element name="br"/>
<xsl:apply-templates select="/buildinfo/textset/text[@id='permission']/node()"/>
<!-- Webmaster feedback note -->
<xsl:element name="br"/>
<xsl:apply-templates select="/buildinfo/textset/text[@id='webmaster']/node()"/>
</xsl:element>
</xsl:element>
<!-- End Footer -->
</xsl:element>
</xsl:copy>
</xsl:template>
<!-- Do not copy non-HTML elements to output -->
<xsl:template match="timestamp|translator|buildinfo/set|buildinfo/textset|buildinfo/menuset|buildinfo/trlist"/>
<!-- For all other nodes, copy verbatim -->
<xsl:template match="@*|node()" priority="-1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>