Separate XSL used for two different purposes
continuous-integration/drone/push Build is passing Details

Having two separate XSL templates makes each of them much better
understandable, and the overlap between them has been separated out into
helper templates.
This commit is contained in:
Reinhard Müller 2020-04-28 15:57:05 +02:00
parent 05052cab4e
commit 1ee18da765
16 changed files with 291 additions and 285 deletions

View File

@ -12,14 +12,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>

View File

@ -100,14 +100,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>

View File

@ -8,7 +8,9 @@
<xsl:import href="gettext.xsl" />
<xsl:import href="../../tools/xsltsl/date-time.xsl" />
<!-- define content type templates-->
<!-- ==================================================================== -->
<!-- News -->
<!-- ==================================================================== -->
<xsl:template name="news">
<xsl:param name="sidebar" select="'no'" />
@ -67,10 +69,37 @@
</xsl:choose>
</xsl:template>
<!-- Show a single event -->
<xsl:template name="event">
<xsl:param name="header" select="''" />
<xsl:param name="display-tags" select="'no'" />
<!-- ==================================================================== -->
<!-- Events -->
<!-- ==================================================================== -->
<!-- Event title with or without link -->
<xsl:template name="event-title">
<xsl:choose>
<xsl:when test="link">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="link"/>
</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
</xsl:when>
<xsl:when test="page">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="page"/>
</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="title"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Event date -->
<xsl:template name="event-date">
<!-- Create variables -->
<xsl:variable name="start">
@ -107,31 +136,34 @@
<xsl:value-of select="substring($end,1,4)" />
</xsl:variable>
<xsl:variable name="link">
<xsl:value-of select="link" />
</xsl:variable>
<!-- Compile the date -->
<xsl:choose>
<xsl:when test="$start != $end">
<xsl:value-of select="$start_day" />
<xsl:text> </xsl:text>
<xsl:if test="$start_month != $end_month">
<xsl:value-of select="$start_month" />
</xsl:if>
<xsl:text> </xsl:text>
<xsl:value-of select="$end_day" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_month" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_year" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$start_day" />
<xsl:text> </xsl:text>
<xsl:value-of select="$start_month" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_year" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:variable name="page">
<xsl:value-of select="page" />
</xsl:variable>
<!-- Show a single event -->
<xsl:template name="event">
<!-- Before the first event, include the header -->
<xsl:if test="position() = 1 and $header != ''">
<xsl:variable name="headertext">
<xsl:value-of select="/buildinfo/document/text[@id = $header]" />
</xsl:variable>
<xsl:if test="$headertext != ''">
<xsl:element name="h2">
<xsl:call-template name="generate-id-attribute">
<xsl:with-param name="title" select="$headertext" />
</xsl:call-template>
<xsl:value-of select="$headertext" />
</xsl:element>
</xsl:if>
</xsl:if>
<!-- Now, the event block -->
<xsl:element name="div">
<xsl:attribute name="class">entry</xsl:attribute>
<xsl:attribute name="id">
@ -140,68 +172,19 @@
<!-- event title with or without link -->
<h3>
<xsl:call-template name="generate-id-attribute">
<xsl:with-param name="title" select="title" />
</xsl:call-template>
<xsl:choose>
<xsl:when test="$link != ''">
<a href="{link}">
<xsl:value-of select="title" />
</a>
</xsl:when>
<xsl:when test="$page != ''">
<a href="{page}">
<xsl:value-of select="title" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="title" />
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="event-title"/>
</h3>
<!-- event date -->
<xsl:choose>
<xsl:when test="$start != $end">
<p class="date">
<xsl:value-of select="$start_day" />
<xsl:text> </xsl:text>
<xsl:if test="$start_month != $end_month">
<xsl:value-of select="$start_month" />
</xsl:if>
<xsl:text> to </xsl:text>
<xsl:value-of select="$end_day" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_month" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_year" />
</p>
</xsl:when>
<xsl:otherwise>
<p class="date">
<xsl:value-of select="$start_day" />
<xsl:text> </xsl:text>
<xsl:value-of select="$start_month" />
<xsl:text> </xsl:text>
<xsl:value-of select="$end_year" />
</p>
</xsl:otherwise>
</xsl:choose>
<p class="date">
<xsl:call-template name="event-date"/>
</p>
<!-- details about the event -->
<div class="details">
<xsl:apply-templates select="body/node()" />
</div>
<!-- tags -->
<xsl:if test="$display-tags = 'yes'">
<ul class="archivetaglist">
<xsl:for-each select="tags/tag[not(@key='front-page')]">
<li><a href="/tags/tagged-{@key}.{/buildinfo/@language}.html"><xsl:value-of select="." /></a></li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:element>
</xsl:template>

View File

@ -25,54 +25,16 @@
<!--display dynamic list of tagged event items-->
<xsl:template name="fetch-events">
<xsl:param name="wanted-time" select="future" /> <!-- value in {"past", "present", "future"} -->
<xsl:param name="header" select="''" />
<xsl:param name="nb-items" select="''" />
<xsl:param name="display-tags" select="'no'" />
<xsl:choose> <xsl:when test="$wanted-time = 'past'">
<!-- Past events -->
<xsl:for-each select="/buildinfo/document/set/event[
translate (@end, '-', '') &lt; translate (/buildinfo/@date, '-', '')
]">
<xsl:sort select="@end" order="descending" />
<xsl:if test="position() &lt;= $nb-items or $nb-items=''">
<xsl:call-template name="event">
<xsl:with-param name="header" select="$header" />
<xsl:with-param name="display-tags" select="$display-tags" />
</xsl:call-template>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/buildinfo/document/set/event[
translate (@end, '-', '') &gt;= translate (/buildinfo/@date, '-', '')
]">
<xsl:sort select="@start"/>
</xsl:when> <xsl:when test="$wanted-time = 'present'">
<!-- Current events -->
<xsl:for-each select="/buildinfo/document/set/event[
translate (@start, '-', '') &lt;= translate (/buildinfo/@date, '-', '')
and translate (@end, '-', '') &gt;= translate (/buildinfo/@date, '-', '')
]">
<xsl:sort select="@start" order="descending" />
<xsl:if test="position() &lt;= $nb-items or $nb-items=''">
<xsl:call-template name="event">
<xsl:with-param name="header" select="$header" />
<xsl:with-param name="display-tags" select="$display-tags" />
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:when> <xsl:otherwise> <!-- if we were not told what to do, display future events -->
<!-- Future events -->
<xsl:for-each select="/buildinfo/document/set/event[
translate (@start, '-', '') &gt; translate (/buildinfo/@date, '-', '')
]">
<xsl:sort select="@start" />
<xsl:if test="position() &lt;= $nb-items or $nb-items=''">
<xsl:call-template name="event">
<xsl:with-param name="header" select="$header" />
<xsl:with-param name="display-tags" select="$display-tags" />
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:otherwise> </xsl:choose>
<xsl:if test="position() &lt;= $nb-items or $nb-items=''">
<xsl:call-template name="event"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -98,21 +98,12 @@
</xsl:call-template>
</xsl:template>
<!-- EVENTS -->
<!--display dynamic list of event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
<!--FIXME ↑ why is it showing one more?-->
</xsl:call-template>
</xsl:template> <!-- /EVENTS -->
</xsl:template>
<!--define dynamic list of country team members-->
<xsl:template match="country-team-list">

View File

@ -100,14 +100,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>

View File

@ -1,33 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="../fsfe.xsl" />
<xsl:import href="../fsfe.xsl"/>
<!-- In /html/body node, append dynamic content -->
<xsl:template match="/buildinfo/document/body/include-events">
<!-- First, include what's in the source file -->
<xsl:apply-templates />
<!-- ==================================================================== -->
<!-- Display a single event -->
<!-- ==================================================================== -->
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
<xsl:with-param name="header" select="'current'" />
<xsl:with-param name="display-tags" select="'yes'" />
</xsl:call-template>
<xsl:template match="event">
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="header" select="'future'" />
<xsl:with-param name="display-tags" select="'yes'" />
</xsl:call-template>
<!-- Wrap the event entry into an <article> -->
<xsl:element name="article">
<xsl:attribute name="class">entry</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="@filename" />
</xsl:attribute>
<!-- Past events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'past'" />
<xsl:with-param name="header" select="'past'" />
<xsl:with-param name="display-tags" select="'yes'" />
</xsl:call-template>
<!-- Title with or without link -->
<xsl:element name="h3">
<xsl:call-template name="event-title"/>
</xsl:element>
<!-- Date -->
<xsl:element name="p">
<xsl:attribute name="class">date</xsl:attribute>
<xsl:call-template name="event-date"/>
</xsl:element>
<!-- Details -->
<xsl:element name="div">
<xsl:attribute name="class">details</xsl:attribute>
<xsl:apply-templates select="body/node()" />
</xsl:element>
<!-- Tags -->
<xsl:element name="ul">
<xsl:attribute name="class">archivetaglist</xsl:attribute>
<xsl:for-each select="tags/tag[not(@key='front-page')]">
<li><a href="/tags/tagged-{@key}.{/buildinfo/@language}.html"><xsl:value-of select="." /></a></li>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
<!-- ==================================================================== -->
<!-- Display a verbose list of events -->
<!-- ==================================================================== -->
<xsl:template match="include-events">
<!-- Define variables needed inside the loop -->
<xsl:variable name="group" select="@group"/>
<xsl:variable name="heading"><xsl:value-of select="."/></xsl:variable>
<!-- Loop through the events matching the selected group -->
<xsl:for-each select="/buildinfo/document/set/event[
not(
(
$group = 'past'
and
translate (@end, '-', '') &gt;= translate (/buildinfo/@date, '-', '')
)
or
(
$group = 'current'
and
(
translate (@start, '-', '') &gt; translate (/buildinfo/@date, '-', '')
or
translate (@end, '-', '') &lt; translate (/buildinfo/@date, '-', '')
)
)
or
(
$group = 'future'
and
translate (@start, '-', '') &lt;= translate (/buildinfo/@date, '-', '')
)
)
]">
<!-- Define sort order -->
<!-- The first (ascending) sort is only used for current and future
events, so for past events, the second (descending) sort order
becomes relevant. -->
<xsl:sort select="@start[$group = 'current' or $group = 'future']"/>
<xsl:sort select="@start" order="descending"/>
<!-- Before the first event, display the heading -->
<xsl:if test="position() = 1">
<xsl:element name="h2">
<xsl:value-of select="$heading"/>
</xsl:element>
</xsl:if>
<!-- Display the event -->
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>

View File

@ -9,22 +9,35 @@
<body class="toplevel article events">
<h1>Veranstaltungen</h1>
<h2>Neue Veranstaltung hinzufügen</h2>
<p>
Wenn du von einer FSFE Veranstaltung weißt, die noch nicht gelistet ist
oder selber eine veranstaltest, kannst du sie ganz einfach zu dieser Liste hinzufügen,
indem du unser <a href="/community/tools/eventregistration.html">Veranstaltungsformular</a> benutzt.
</p>
<section id="add-event">
<h2>Neue Veranstaltung hinzufügen</h2>
<include-events/>
<p>
Wenn du von einer FSFE Veranstaltung weißt, die noch nicht gelistet ist
oder selber eine veranstaltest, kannst du sie ganz einfach zu dieser Liste hinzufügen,
indem du unser <a href="/community/tools/eventregistration.html">Veranstaltungsformular</a> benutzt.
</p>
</section>
<h2><a href="2018/index.html">Veranstaltungsarchive</a></h2>
<section id="current-events">
<include-events group="current">Aktuelle Veranstaltungen</include-events>
</section>
<section id="future-events">
<include-events group="future">Kommende Veranstaltungen</include-events>
</section>
<section id="past-events">
<include-events group="past">Vergangene Veranstaltungen</include-events>
</section>
<p>
Für ältere Veranstaltungen, schaue in unseren Veranstaltungsarchiven.
<a class="learn-more" href="2018/index.html"/>
</p>
<section id="events-archive">
<h2><a href="2018/index.html">Veranstaltungsarchive</a></h2>
<p>
Für ältere Veranstaltungen, schaue in unseren Veranstaltungsarchiven.
<a class="learn-more" href="2018/index.html"/>
</p>
</section>
</body>
<sidebar promo="none">
@ -75,10 +88,6 @@
Falls du Interesse hast, dann informiere dich, um sie nicht zu verpassen.
</p>
</sidebar>
<text id="current">Aktuelle Veranstaltungen</text>
<text id="future">Kommende Veranstaltungen</text>
<text id="past">Vergangene Veranstaltungen</text>
</html>
<!--

View File

@ -9,22 +9,35 @@
<body class="toplevel article events">
<h1>Events</h1>
<h2>Add an event</h2>
<p>
If you know about a FSFE related event that is not yet listed here or
that you run on your own, you can easily add it by using our
<a href="/community/tools/eventregistration.html">event announcement tool</a>.
</p>
<section id="add-event">
<h2>Add an event</h2>
<include-events/>
<p>
If you know about a FSFE related event that is not yet listed here or
that you run on your own, you can easily add it by using our
<a href="/community/tools/eventregistration.html">event announcement tool</a>.
</p>
</section>
<h2><a href="2018/index.html">Event archives</a></h2>
<section id="current-events">
<include-events group="current">Current events</include-events>
</section>
<section id="future-events">
<include-events group="future">Future events</include-events>
</section>
<section id="past-events">
<include-events group="past">Past events</include-events>
</section>
<p>
For older events, please see our event archives.
<a class="learn-more" href="2018/index.html"/>
</p>
<section id="event-archives">
<h2><a href="2018/index.html">Event archives</a></h2>
<p>
For older events, please see our event archives.
<a class="learn-more" href="2018/index.html"/>
</p>
</section>
</body>
<sidebar promo="none">
@ -75,8 +88,4 @@
interested, make sure not to miss them.
</p>
</sidebar>
<text id="current">Current events</text>
<text id="future">Future events</text>
<text id="past">Past events</text>
</html>

View File

@ -9,22 +9,35 @@
<body class="toplevel article events">
<h1>Evénements</h1>
<h2>Ajouter un événement</h2>
<p>
Si vous connaissez un événement lié à la FSFE qui n'est pas encore répertorié ici ou
que vous organisez seul, vous pouvez facilement lajouter en utilisant notre
<a href="/community/tools/eventregistration.html">outil d'annonce d'événement</a>.
</p>
<section id="add-event">
<h2>Ajouter un événement</h2>
<include-events/>
<p>
Si vous connaissez un événement lié à la FSFE qui n'est pas encore répertorié ici ou
que vous organisez seul, vous pouvez facilement lajouter en utilisant notre
<a href="/community/tools/eventregistration.html">outil d'annonce d'événement</a>.
</p>
</section>
<h2><a href="2018/index.html">Evénements archivés</a></h2>
<section id="current-events">
<include-events group="current">Evénements actuels</include-events>
</section>
<section id="future-events">
<include-events group="future">Evénements à venir</include-events>
</section>
<section id="past-events">
<include-events group="past">Evénements passés</include-events>
</section>
<p>
Pour les événements plus anciens, veuillez consulter nos archives d'événements.
<a class="learn-more" href="2018/index.html"/>
</p>
<section id="event-archives">
<h2><a href="2018/index.html">Evénements archivés</a></h2>
<p>
Pour les événements plus anciens, veuillez consulter nos archives d'événements.
<a class="learn-more" href="2018/index.html"/>
</p>
</section>
</body>
<sidebar promo="none">
@ -76,8 +89,5 @@
</p>
</sidebar>
<text id="current">Evénements actuels</text>
<text id="future">Evénements à venir</text>
<text id="past">Evénements passés</text>
<translator>Julien, OliBug</translator>
</html>

View File

@ -9,22 +9,35 @@
<body class="toplevel article events">
<h1>Eventi</h1>
<h2>Add an event</h2>
<p>
Se sei a conoscenza di un evento collegato alla FSFE che non è presente nella lista
o ne stai organizzando uno, puoi aggiungerlo a questa pagina usando lo strumento di
<a href="/community/tools/eventregistration.html">registrazione eventi</a>.
</p>
<section id="add-event">
<h2>Add an event</h2>
<include-events/>
<p>
Se sei a conoscenza di un evento collegato alla FSFE che non è presente nella lista
o ne stai organizzando uno, puoi aggiungerlo a questa pagina usando lo strumento di
<a href="/community/tools/eventregistration.html">registrazione eventi</a>.
</p>
</section>
<h2><a href="2018/index.html">Archivio eventi</a></h2>
<section id="current-events">
<include-events group="current">Eventi in corso</include-events>
</section>
<section id="future-events">
<include-events group="future">Eventi futuri</include-events>
</section>
<section id="past-events">
<include-events group="past">Eventi passati</include-events>
</section>
<p>
Gli eventi precedenti a questo periodo sono consultabili presso l'Archivio eventi.
<a class="learn-more" href="2018/index.html"/>
</p>
<section id="event-archives">
<h2><a href="2018/index.html">Archivio eventi</a></h2>
<p>
Gli eventi precedenti a questo periodo sono consultabili presso l'Archivio eventi.
<a class="learn-more" href="2018/index.html"/>
</p>
</section>
</body>
<sidebar promo="none">
@ -75,8 +88,4 @@
interessato ad uno di questi eventi dovrai ricordarti di non mancare.
</p>
</sidebar>
<text id="current">Eventi in corso</text>
<text id="future">Eventi futuri</text>
<text id="past">Eventi passati</text>
</html>

View File

@ -9,20 +9,33 @@
<body class="toplevel article events">
<h1>Evenementen</h1>
<h2>Voeg een evenement toe</h2>
<p>
Als u een FSFE-gerelateerd evenement kent dat hier nog net staat vermeld of dat u zelf organiseert dan kunt u het eenvoudig toevoegen door gebruik te maken van ons <a href="/community/tools/eventregistration.html">evenement aankondigingsgereedschap</a>.
</p>
<section id="add-event">
<h2>Voeg een evenement toe</h2>
<include-events/>
<p>
Als u een FSFE-gerelateerd evenement kent dat hier nog net staat vermeld of dat u zelf organiseert dan kunt u het eenvoudig toevoegen door gebruik te maken van ons <a href="/community/tools/eventregistration.html">evenement aankondigingsgereedschap</a>.
</p>
</section>
<h2><a href="2018/index.html">Evenementenarchief</a></h2>
<section id="current-events">
<include-events group="current">Lopende evenementen</include-events>
</section>
<section id="future-events">
<include-events group="future">Komende evenementen</include-events>
</section>
<section id="past-events">
<include-events group="past">Afgelopen evenementen</include-events>
</section>
<p>
U vindt oudere evenementen in ons evenementenarchief.
<a class="learn-more" href="2018/index.html"/>
</p>
<section id="event-archives">
<h2><a href="2018/index.html">Evenementenarchief</a></h2>
<p>
U vindt oudere evenementen in ons evenementenarchief.
<a class="learn-more" href="2018/index.html"/>
</p>
</section>
</body>
<sidebar promo="none">
@ -62,8 +75,5 @@ Sommige officieuze en zelf-georganiseerde gemeenschapsevenementen worden alleen
</p>
</sidebar>
<text id="current">Lopende evenementen</text>
<text id="future">Komende evenementen</text>
<text id="past">Afgelopen evenementen</text>
<translator>André Ockers</translator>
</html>

View File

@ -100,14 +100,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>

View File

@ -100,14 +100,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="2" />
</xsl:call-template>
</xsl:template>

View File

@ -100,14 +100,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>

View File

@ -99,14 +99,7 @@
<!--define dynamic list of country event items-->
<xsl:template match="country-events">
<!-- Current events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'present'" />
</xsl:call-template>
<!-- Future events -->
<xsl:call-template name="fetch-events">
<xsl:with-param name="wanted-time" select="'future'" />
<xsl:with-param name="nb-items" select="3" />
</xsl:call-template>
</xsl:template>