Merge branch 'redesign'

This commit is contained in:
Astro 2013-11-13 01:07:54 +01:00
commit 39bf476153
12 changed files with 229 additions and 556 deletions

View File

@ -239,16 +239,16 @@ portal/items-sorted.xml: portal/items.xml $(STYLE)
$(call xml_process)
build/portal.html : NOINPUTVALID:=true
build/portal.html: portal/items-sorted.xml $(STYLE)
build/portal.html: portal/items-sorted.xml $(STYLE) $(CALENDAR_SUMMARY)
$(call xml_process)
# Pages:
build/%.html: content/pages/%.xml $(STYLE) $(NAVIGATION) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP) news.xml
build/%.html: content/pages/%.xml $(STYLE) $(NAVIGATION) $(DATESTAMP) news.xml
$(call xml_process)
# News:
build/news/%.html : BASEURL="../"
build/news/%.html: content/news/%.xml $(STYLE) $(NAVIGATION) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP)
build/news/%.html: content/news/%.xml $(STYLE) $(NAVIGATION) $(DATESTAMP)
$(call xml_process)
# Datenspuren

View File

@ -5,22 +5,30 @@ When changing the position of these files in the navigation sidebar,
please adjust the #navigation li:nth-child(...) rules in the CSS file.
-->
<navigation>
<file title="News">news</file>
<file>whois</file>
<file>space</file>
<file>themenabende</file>
<file>events</file>
<file>schule</file>
<file>kontakt</file>
<file>mailingliste</file>
<file>muc</file>
<file>wiki</file>
<file>radio</file>
<file>podcast</file>
<file>pentamusic</file>
<file>shop</file>
<file>warez</file>
<group>
<file title="News">news</file>
<file>whois</file>
<file>space</file>
<file>schule</file>
</group>
<group>
<file title="Kalender">calendar</file>
<file>themenabende</file>
<file>events</file>
</group>
<group>
<file>kontakt</file>
<file>mailingliste</file>
<file>muc</file>
<file>wiki</file>
</group>
<group>
<file>radio</file>
<file>podcast</file>
<file>pentamusic</file>
</group>
<group>
<file>shop</file>
<file>warez</file>
</group>
</navigation>

View File

@ -1,7 +1,6 @@
<config>
<gallery id="media-lachmoewe">https://media.c3d2.de/u/lachmoewe/atom/</gallery>
<gallery id="media-bigalex">https://media.c3d2.de/u/bigalex/atom/</gallery>
<gallery id="media-joerg">https://media.c3d2.de/u/joerg/atom/</gallery>
<gallery id="media-astro">https://media.c3d2.de/u/astro/atom/</gallery>
<wiki id="wiki">https://wiki.c3d2.de/w/index.php?title=Spezial:Letzte_%C3%84nderungen&amp;feed=atom&amp;days=300&amp;limit=60</wiki>
</config>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

View File

@ -1,31 +0,0 @@
/**
* Original: https://github.com/trailblazr/30c3-countdown-banner-180x270/blob/master/30c3.html
* Heavily Modified
**/
$(document).ready(function() {
var el = $("<a class='countdown' href='https://events.ccc.de/congress/2013/' title='Click to get teleported to the 30C3 chaos wiki ...'><div class='countdownLine' style='margin-top:70px;'><div class='countdownElement'><span class='days'>0</span><span class='foo'>d </span></div><div class='countdownElement'><span class='hours'>0</span><span class='foo'>h </span></div><div class='countdownElement'><span class='minutes'>0</span><span class='foo'>m </span></div><div class='countdownElement'><span class='seconds'>0</span><span class='foo'>s</span></div></div></a>");
var padLeft = function(n, l, p) {
n = "" + n;
while(n.length < l)
n = p + n;
return n;
};
var target = new Date("2013-12-27T10:00:00+01:00").getTime();
var updateCountDown = function() {
var now = new Date().getTime();
var left = (target - now) / 1000;
var setField = function(id, val) {
el.find(id).text(padLeft(val, 2, "0"));
};
setField('.days', Math.floor(left / 86400));
setField('.hours', Math.floor(left / 3600) % 24);
setField('.minutes', Math.floor(left / 60) % 60);
setField('.seconds', Math.floor(left) % 60);
}
setInterval(updateCountDown, 1000);
updateCountDown();
$('#adspace').empty().append(el);
});

View File

@ -1,10 +1,8 @@
/* -- General -- */
body {
font: 0.8em Verdana, Arial, sans-serif;
background-image: url(../images/background.png);
text-align: center;
min-width: 1024px;
/* max-width: 1280px; margin: 0 auto; */
font: Verdana, Arial, sans-serif;
margin: 0;
padding: 276px 0 0;
}
pre {
@ -32,58 +30,58 @@ pre {
}
#logo {
margin: 2em 2em 0 2em;
height: 150px;
background: url(../images/c3d2_blue.jpg);
margin: 0;
padding: 0;
position: absolute;
top: 0;
height: 276px;
left: 0;
right: 0;
background-image: url(../images/c3d2_blue.jpg);
text-align: left;
border-top-left-radius: 30px;
-moz-border-radius-topleft: 30px;
-webkit-border-top-left-radius: 30px;
border-top-right-radius: 30px;
-moz-border-radius-topright: 30px;
-webkit-border-top-right-radius: 30px;
}
#logo h1 {
position: relative;
top: 47px;
left: 23px;
/* position: relative; */
/* top: 47px; */
/* left: 23px; */
padding: 65px 0 0 0;
max-width: 960px;
margin: 47px auto 0;
overflow: hidden;
background-image: url(../images/logo.png);
background-repeat: no-repeat;
height: 0px !important;
}
/* -- Body -- */
#body {
display: block;
border: thin solid #ccc;
border-top: none;
background-color: white;
margin: 0 2em 0 2em;
background: #fff url(../images/background_bottom.png) no-repeat left bottom;
}
/* -- Navigation -- */
/* TODO: should overlap background image */
#navigation {
float: left;
position: absolute;
left: 0;
right: 0;
bottom: 0;
text-align: left;
width: 14em;
margin: 0;
padding: 0 1em;
padding-top: 100px;
background: url(../images/ck.png) top center no-repeat;
background-color: rgba(0, 0, 0, 0.7);
border-bottom: 3px solid black;
}
#navgroups {
display: block;
max-width: 960px;
margin: 0 auto;
}
#navigation ul {
list-style-type: square;
list-style-image: url(../images/bullet.png);
display: inline-block;
list-style-type: none;
font-size: small;
padding-left: 2em;
padding-top: 0.2em;
border-top: #ebc63c 1px solid;
margin: 0.5em 0;
padding: 0 5em 0 0;
vertical-align: top;
}
#navigation li {
@ -96,25 +94,29 @@ pre {
}
#navigation a {
color: #676767;
color: #ddd;
text-decoration: none;
font-weight: bold;
}
#navigation a:hover {
color: white;
text-decoration: underline;
}
/* -- Content -- */
#content {
text-align: left;
border-left: #ccc 1.1px dashed;
border-right: #ccc 1.1px dashed;
line-height: 1.3em;
padding: 2em;
margin: 0 auto;
padding: 2em 0 4em;
min-height: 300px;
min-width: 30em;
margin: 0 24em 0 16em;
max-width: 960px;
}
#content.portalcontainer {
max-width: inherit;
padding: 0 0 4em;
text-align: center;
}
#content p {
@ -154,6 +156,7 @@ pre {
margin-bottom: 1em;
margin-top: 0px;
color: #333;
text-align: center;
}
#content h3 {
@ -234,10 +237,9 @@ p.new_comment a:before {
/* -- Sidebar right -- */
#rsidebar {
width: 24em;
float: right;
margin: 0;
padding: 0;
padding: 0.5em 0.5em 1em 1em;
font-size: small;
text-align: left;
}
@ -299,38 +301,6 @@ p.new_comment a:before {
text-decoration: none;
}
/* -- Upcoming -- */
#upcoming {
padding: 0 1em 0 2em;
}
#upcoming h2 {
font-size: 1.2em;
border-top: #ebc63c 1px solid;
padding-top: 5%;
}
#upcoming ul {
list-style-type: none;
font-size: small;
margin-left: -2em;
}
#upcoming ul li {
line-height: 1.5em;
margin-top: .5em;
}
#upcoming a {
color: #666;
text-decoration: none;
font-style: italic;
}
#upcoming a:hover {
text-decoration: underline;
}
/* -- footer -- */
#footer {
clear: both;
@ -434,21 +404,26 @@ abbr.dtstart, abbr.dtend {
/* -- Portal -- */
#portal {
text-align: center;
white-space-collapsing: discard;
}
#portal article {
display: inline-block;
text-align: left;
}
#portal article > a {
display: block;
position: relative;
width: 14.5em;
height: 14.5em;
overflow: hidden;
text-align: left;
vertical-align: middle;
margin: 0.3em 0 0 0;
padding: 0;
}
#portal article > a {
display: block;
border-bottom: none;
margin: 0;
padding: 0;
width: 14.5em;
height: 14.5em;
}
#portal article > a:hover {
margin: 0;
@ -466,9 +441,8 @@ abbr.dtstart, abbr.dtend {
overflow: hidden;
text-overflow: ellipsis;
font-weight: 100;
background-color: black;
background-color: rgba(0, 0, 0, 0.6);
color: white;
opacity: 0.7;
z-index: 2;
}
/* <header/> */
@ -477,7 +451,7 @@ abbr.dtstart, abbr.dtend {
transition: top 0.3s ease-out;
letter-spacing: 0;
}
#portal a:hover h3 {
#portal article:hover h3 {
top: 0;
transition: top 0.1s ease-in;
}
@ -487,7 +461,7 @@ abbr.dtstart, abbr.dtend {
transition: bottom 0.3s ease-out;
letter-spacing: 0;
}
#portal a:hover .footer {
#portal article:hover .footer {
bottom: 0;
transition: bottom 0.1s ease-in;
}
@ -495,16 +469,24 @@ abbr.dtstart, abbr.dtend {
#portal h4 {
position: absolute;
left: 0;
top: 1em;
top: 1.2rem;
padding: 0.2em 0.1em;
line-height: 0.9em;
font-size: x-large;
font-weight: bold;
letter-spacing: 0;
color: #333;
text-shadow: -1px 0 1.5px white, 0 1px 1.5px white, 1px 0 1.5px white, 0 -1px 1.5px white;
color: #111;
text-shadow:
-1px 0 1px white, 0 1px 1px white,
1px 0 1px white, 0 -1px 1px white;
background-color: rgba(0, 0, 0, 0);
transition: all 0.3s ease-out;
}
#portal a:hover h4 {
color: black;
#portal article.news:hover h4 {
color: white;
background-color: rgba(0, 0, 0, 0.6);
text-shadow: none;
transition: all 0.1s ease-in;
}
#portal .wiki h4 {
text-align: justify;
@ -521,6 +503,28 @@ abbr.dtstart, abbr.dtend {
content: ']]';
}
#portal .space > a {
background: url(//www.hq.c3d2.de/status.png) 50% 50% no-repeat;
}
/* -- Upcoming -- */
#portal .upcoming h3 a {
color: white;
}
#portal .upcoming ul {
list-style-type: none;
font-size: small;
margin: 2em 0 0;
padding: 0 0 0 1.5em;
}
#portal .upcoming ul li {
line-height: 1.5em;
margin-top: .5em;
}
/* -- Calendar -- */
table.calendar {
table-layout: fixed;
@ -716,10 +720,6 @@ a[href$="xcal.xml"]:before {
content: url(../images/mime/calendar.png);
padding-right: 0.3em;
}
a[href$="calendar.html"]:before {
content: url(../images/mime/calendar.png);
padding-right: 0.3em;
}
#news h2 a:before {
content: url(../images/mime/feed.png);
padding-right: 0.3em;
@ -817,6 +817,7 @@ li audio, li video, li .poster {
}
.video-resource ul {
padding: 0;
font-size: small;
}
.video-resource ul li.play-resource {
display: block;
@ -827,7 +828,7 @@ li audio, li video, li .poster {
}
.video-resource .size {
margin-left: 0.4em;
font-size: 85%;
font-size: smaller;
color: #333;
}
@ -876,35 +877,3 @@ article,aside,details,figcaption,figure,
footer,header,hgroup,menu,nav,section {
display: block;
}
/* -- 30c3-countdown -- */
.countdown {
display: block;
width:180px;
height:270px;
background-image: url('../images/30c3_propaganda_180x270.png');
background-size:100%;
background-repeat:no-repeat;
max-width:180px;
margin:auto;
text-align: center;
color:white !important;
font-family:'Source Sans Pro',monospace,Helvetica,Arial,Sans-Serif;
font-size:22px;
font-weight:300;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
padding:7px;
border:none;
}
.countdown .countdownElement {
display: inline-block;
}
.countdown .foo {
color:white;
font-size:8px;
font-weight: 100;
white-space: pre;
}

View File

@ -1,293 +0,0 @@
body {
padding: 2%;
font: 120% Verdana, Arial, sans-serif;
background-image: url(../images/background.png);
text-align: center;
}
a[href ^=https] {
padding-left: 16px;
margin-left: 2px;
background: url(../images/secure.png) no-repeat;
}
pre {
border: thin dotted #ccc;
margin-left: 20px;
margin-right: 20px;
background-color: #fafafa;
padding: 1em;
}
#page {
float: left;
max-width: 1200px;
min-width: 800px;
}
#body {
display: table;
float: left;
max-width: 100% !important;
width: 100% !important;
}
#logo::before {
background: transparent url(../images/top-right.png) scroll no-repeat top right;
margin-bottom: -20px;
height: 30px;
display: block;
border: none;
content: url(../images/top-left.png);
padding: 0;
line-height: 0.1;
font-size: 1px;
}
#logo {
height: 150px;
background: url(../images/c3d2_blue.jpg);
text-align: left;
}
#logo h1 {
position: relative;
top: 23px;
left: 23px;
padding: 65px 0 0 0;
overflow: hidden;
background-image: url(../images/logo.png);
background-repeat: no-repeat;
height: 0px !important;
height /**/:65px;
}
#navigation {
text-align: left;
display: table-cell;
margin-left: 0px;
width: 12%;
padding: 0.5em;
margin-top: 10px;
padding-top: 100px;
background: url(../images/ck.png) top center no-repeat;
}
#navigation form {
padding: 0.2em 0 0.2em 0;
margin: 1em 0.3em 0 0.3em;
border-top: #ebc63c 1px solid;
border-bottom: #ebc63c 1px solid;
text-align: center;
}
#navigation input[type =text] {
width: 80%;
}
#navigation ul {
list-style-type: square;
list-style-image: url(../images/bullet.png);
font-size: small;
margin-left: 0;
}
#navigation li {
line-height: 2em;
}
#navigation a {
color: #676767;
text-decoration: none;
font-weight: bold;
}
#navigation a:hover {
text-decoration: underline;
}
#content {
display: table-cell;
text-align: left;
width: 50%;
border-left: #ccc 1.1px dashed;
border-right: #ccc 1.1px dashed;
font-size: 75%;
line-height: 1.3em;
padding: 0 2em;
}
#content p {
margin: 1.5em 1em;
}
#content a {
text-decoration: none;
border-bottom: #ebc63c 1px solid;
color: #555;
}
#content a:hover {
border-width: 2px;
}
#content h1,
#content h2,
#content h3,
#content h4,
#content h5 {
letter-spacing: 3px;
margin: 0px;
background-color: transparent;
font-weight: bold;
}
#content h2 {
font-size: 200%;
margin-bottom: 1em;
margin-top: 0px;
color: #333;
}
#content h3 {
font-size: 150%;
margin-top: 30px;
color: #555;
}
#content h4 {
font-size: 120%;
}
#news {
text-align: left;
display: table-cell;
margin-right: 1em;
width: 10%;
background: url(../images/pesthoernchen.png) top center no-repeat;
padding: 1em;
padding-top: 90px;
margin-top: 10px;
font-size: small;
}
#news h2 {
font-size: 1.2em;
border-top: #ebc63c 1px solid;
padding-top: 5%;
}
#news ul {
list-style-type: circle;
list-style-image: url(../images/star.png);
font-size: small;
margin-left: -1em;
max-width: 10em !important;
}
#news ul li {
line-height: 1.5em;
}
#news a {
color: #666;
text-decoration: none;
font-style: italic;
}
#news a:hover {
text-decoration: underline;
}
#footer {
text-align: center;
font-size: small;
border: #ccc 1px solid;
border-top: none;
background: #fff url(../images/background_bottom.png) no-repeat left bottom;
}
#footer ul, #footer li {
display: inline;
list-style-type: none;
}
#footer li a {
margin: 0 1em;
color: #676767;
text-decoration: none;
font-weight: bold;
}
#footer li a img {
border: none;
}
.hidden {
color: white;
font-size: xx-small;
clear: both;
}
#update {
font: xx-small sans-serif;
letter-spacing: 0.8px;
color: #666;
}
#content hr.news {
visibility: hidden;
clear: both;
}
#content div.news {
padding: 1em;
margin: 0;
margin-bottom: 0.5em;
}
.news_author {
font-size: small;
font-style: italic;
margin-left: 1em;
font-weight: bold;
}
#content h3.news {
border-bottom: #ebc63c 3px solid;
padding: 0px;
line-height: 1.1em;
font-size: 130%;
}
#content h3.news a {
border: none;
}
/* some little helpers */
img.left {
float: left;
margin-right: 1em;
}
img.right {
float: right;
margin-left: 1em;
}
dt {
font-weight: bold;
font-style: italic;
margin-left: 2em;
margin-top: 0.5em;
color: #555;
}
dt:after {
content: ":";
}
dl {
font-size: 90%;
margin-top: 2em;
margin-bottom: 3em;
}
dt.main {
font-style: normal;
font-size: 100%;
margin-left: 1em;
margin-top: 1em;
color: #000;
}
dt.main:after, dt.main:before {
content: "";
}
dd, dt {
font-size: 95%;
}
dd {
margin-left: 4em;
}

View File

@ -184,15 +184,17 @@
</xsl:template>
<xsl:template name="navitems">
<ul>
<xsl:for-each select="document('../content/navigation.xml')/navigation/file">
<xsl:call-template name="navitem">
<xsl:with-param name="file" select="."/>
<xsl:with-param name="title" select="@title"/>
<xsl:with-param name="baseurl" select="$baseurl"/>
</xsl:call-template>
</xsl:for-each>
</ul>
<xsl:for-each select="document('../content/navigation.xml')/navigation/group">
<ul>
<xsl:for-each select="file">
<xsl:call-template name="navitem">
<xsl:with-param name="file" select="."/>
<xsl:with-param name="title" select="@title"/>
<xsl:with-param name="baseurl" select="$baseurl"/>
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:for-each>
</xsl:template>
<!-- Adspace -->
@ -237,46 +239,40 @@
<xsl:template name="calendar-events">
<xsl:param name="limit" select="5"/>
<xsl:if test="document('../calendar-summary.xml')/page/calendar-summary/event[date:seconds(end) &gt;= date:seconds(date:date())]">
<div id="upcoming">
<h2>
<a href="{$baseurl}calendar.html">Kalender</a>
</h2>
<ul>
<xsl:for-each select="document('../calendar-summary.xml')/page/calendar-summary/event[date:seconds(end) &gt;= date:seconds(date:date())]">
<xsl:sort select="date:seconds(start)" data-type="number" order="ascending" />
<xsl:if test="position() &lt;= $limit">
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="link"/>
</xsl:call-template>
</xsl:variable>
<ul>
<xsl:for-each select="document('../calendar-summary.xml')/page/calendar-summary/event[date:seconds(end) &gt;= date:seconds(date:date())]">
<xsl:sort select="date:seconds(start)" data-type="number" order="ascending" />
<li>
<xsl:call-template name="datespan-to-human">
<xsl:with-param name="start" select="start"/>
<xsl:with-param name="end" select="end"/>
</xsl:call-template>:
<a>
<xsl:if test="string-length($href) &gt; 0">
<xsl:attribute name="href">
<xsl:value-of select="$href"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="string-length(location) &gt; 0">
<xsl:attribute name="title">
<xsl:value-of select="concat('Ort: ', location)"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="title"/>
</a>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</div>
</xsl:if>
<xsl:if test="position() &lt;= $limit">
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="link"/>
</xsl:call-template>
</xsl:variable>
<li>
<xsl:call-template name="datespan-to-human">
<xsl:with-param name="start" select="start"/>
<xsl:with-param name="end" select="end"/>
</xsl:call-template>:
<a>
<xsl:if test="string-length($href) &gt; 0">
<xsl:attribute name="href">
<xsl:value-of select="$href"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="string-length(location) &gt; 0">
<xsl:attribute name="title">
<xsl:value-of select="concat('Ort: ', location)"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="title"/>
</a>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
<!-- Support für <event/> bzw. Microformats -->

View File

@ -13,7 +13,6 @@
<xsl:text> ### Footer ### </xsl:text>
</xsl:comment>
<ul>
<li><a href="{$baseurl}impressum.html">Impressum</a></li>
<li>
<!-- Creative Commons License -->
<xsl:comment>
@ -47,6 +46,7 @@
</xsl:text>
</xsl:comment>
</li>
<li><a href="{$baseurl}impressum.html">Impressum</a></li>
<li>
<a href="http://www.w3.org/html/logo/">
<img src="{$baseurl}images/footer/html5-badge-h-multimedia-semantics.png"

View File

@ -62,9 +62,6 @@
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'bitlove-enclosures'"/>
</xsl:call-template>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'30c3-countdown-banner'"/>
</xsl:call-template>
</xsl:template>

View File

@ -12,7 +12,10 @@
<xsl:template match="/config">
<portal>
<!-- Extract from fetched XML files -->
<xsl:apply-templates select="*[@id]"/>
<!-- Extract from news -->
<xsl:for-each select="document('../news.xml')//newsfile">
<xsl:apply-templates select="document(concat('../', .))/item" mode="news">
<xsl:with-param name="link"
@ -58,18 +61,29 @@
</xsl:template>
<xsl:template match="atom:entry" mode="wiki">
<item date="{atom:updated}" class="wiki">
<header>C3D2 Wiki</header>
<footer>by <xsl:value-of select="atom:author/atom:name"/></footer>
<content-text><xsl:value-of select="atom:title"/></content-text>
<link><xsl:value-of select="atom:link[@rel='alternate'][1]/@href"/></link>
</item>
<xsl:variable name="title" select="atom:title"/>
<!-- Don't repeat any titles -->
<xsl:if test="not(preceding-sibling::atom:entry/atom:title = $title)">
<item date="{atom:updated}" class="wiki">
<header>C3D2 Wiki</header>
<footer>
<xsl:text>by </xsl:text>
<xsl:value-of select="atom:author/atom:name"/>
<xsl:for-each select="following-sibling::atom:entry[atom:title = $title]/atom:author/atom:name">
<xsl:text>, </xsl:text>
<xsl:value-of select="normalize-space(.)"/>
</xsl:for-each>
</footer>
<content-text><xsl:value-of select="atom:title"/></content-text>
<link><xsl:value-of select="atom:link[@rel='alternate'][1]/@href"/></link>
</item>
</xsl:if>
</xsl:template>
<xsl:template match="item" mode="news">
<xsl:param name="link"/>
<item date="{@date}">
<item date="{@date}" class="news">
<header>News</header>
<footer>by <xsl:value-of select="@author"/></footer>
<content-text><xsl:value-of select="@title"/></content-text>

View File

@ -77,31 +77,18 @@
</xsl:comment>
<div id="logo">
<a href="http://c3d2.de"><h1>&lt;&lt;&lt;/&gt;&gt; Chaos Computer Club Dresden | c3d2</h1></a>
<!-- ### Navigation ### -->
<xsl:comment>
<xsl:text> ### Navigation ### </xsl:text>
</xsl:comment>
<nav id="navigation">
<div id="navgroups">
<xsl:call-template name="navitems" />
</div>
</nav>
</div>
<div id="body">
<!-- ### Navigation ### -->
<xsl:comment>
<xsl:text> ### Navigation ### </xsl:text>
</xsl:comment>
<nav id="navigation">
<xsl:call-template name="navitems" />
</nav>
<!-- ### News ### -->
<xsl:comment>
<xsl:text> ### News ### </xsl:text>
</xsl:comment>
<aside id="rsidebar">
<xsl:call-template name="adspace" />
<xsl:call-template name="calendar-events" />
<xsl:call-template name="chaosupdates" />
</aside>
<!-- ### Content ### -->
<xsl:comment>
@ -112,6 +99,9 @@
<xsl:if test="event">
<xsl:attribute name="class">vevent</xsl:attribute>
</xsl:if>
<xsl:if test="/page/portal">
<xsl:attribute name="class">portalcontainer</xsl:attribute>
</xsl:if>
<xsl:if test="$title != ''">
<h2>
@ -135,7 +125,6 @@
</section> <!-- id="content" -->
<xsl:call-template name="footer" />
</div> <!-- id="body" -->
</div> <!-- id="page" -->
</xsl:element> <!-- name="body" -->
</xsl:element> <!-- name="html" -->
@ -315,7 +304,32 @@
<xsl:template match="/page/portal">
<section id="portal">
<xsl:apply-templates select="item[position() &lt;= 60]"/>
<!-- Upcoming events -->
<article class="upcoming">
<h3>
<a href="calendar.html">Kalender</a>
</h3>
<xsl:call-template name="calendar-events">
<xsl:with-param name="limit" select="4"/>
</xsl:call-template>
</article>
<!-- TODO:
chaosupdates
pentaradios?
space status
-->
<xsl:apply-templates select="item[position() &lt; 4]"/>
<article class="space">
<a href="space.html">
<h3>Hackerspace</h3>
<p class="footer">Current status</p>
</a>
</article>
<xsl:apply-templates select="item[position() &gt;= 4 and position() &lt;= 32]"/>
</section>
</xsl:template>