Merge branch 'redesign' of git.c3d2.de:c3d2-web into redesign

This commit is contained in:
Eri - 2014-06-30 17:01:29 +02:00
commit 65414ae041
34 changed files with 3963 additions and 879 deletions

View File

@ -12,68 +12,97 @@ HTML_OUTPUT=output/html
PAGE_OUTPUT=output/page
NEWS_OUTPUT=output/news
#
# C3D2-specific configuration
#
TITLE_PREFIX="C3D2 Blub"
BASEURL=""
#
# Predefined functions
#
# calendar2page (target, pathinclude) where
# "target" - the path of the xml file to be transformed
# "pathinclude" - additional paths (separated by whitespace) for inclusion of news items
calendar2page = $(PROCESSOR) $(PFLAGS) --path "$(PAGE_OUTPUT) $(2)" $(TRANSFORMATION_ROOT)/calendar2page/calendar2page.xsl $(1)
# news2page (target, pathinclude) where
# "target" - the path of the xml file to be transformed
# "pathinclude" - additional paths (separated by whitespace) for inclusion of news items
news2page = $(PROCESSOR) $(PFLAGS) --path "$(NEWS_OUTPUT) $(2)" $(TRANSFORMATION_ROOT)/news2page/news.xsl $(1)
news2page = $(PROCESSOR) $(PFLAGS) --path "$(NEWS_OUTPUT) $(2)" $(TRANSFORMATION_ROOT)/news2page/news2page.xsl $(1)
# page2html (target, pathincluce) where
# page2html (target, pathinclude) where
# "target" - the path of the xml file to be transformed
# "pathinclude" - additional paths (separated by whitespace) for inclusion of news items
page2html = $(PROCESSOR) $(PFLAGS) --path "$(PAGE_OUTPUT) $(TRANSFORMATION_ROOT)/page2html $(2)" --stringparam baseurl $(BASEURL) --stringparam common_title_prefix $(TITLE_PREFIX) $(TRANSFORMATION_ROOT)/page2html/page2html.xsl $(1)
page2html = $(PROCESSOR) $(PFLAGS) --path "$(PAGE_OUTPUT) $(TRANSFORMATION_ROOT)/page2html $(2)" html.xsl $(1)
all: prepare_output $(HTML_OUTPUT)/news.html $(HTML_OUTPUT)/unterstuetzen.html $(HTML_OUTPUT)/schule.html
#
# Locations of the files to be generated
#
PAGES_DIR=content/c3d2/pages
STATIC_PAGES:=$(patsubst $(PAGES_DIR)/%.xml, $(HTML_OUTPUT)/%.html, $(wildcard $(PAGES_DIR)/*.xml))
ITEMS_DIR=content/c3d2/items
NEWS_ITEMS:=$(patsubst $(ITEMS_DIR)/%.xml, $(HTML_OUTPUT)/news/%.html, $(wildcard $(ITEMS_DIR)/*.xml))
#
# The main recipe
#
all: prepare_output $(HTML_OUTPUT)/kalender.html $(HTML_OUTPUT)/news.html $(NEWS_ITEMS) $(STATIC_PAGES)
prepare_output:
mkdir -p $(HTML_OUTPUT) $(PAGE_OUTPUT) $(NEWS_OUTPUT)
cp -rf content/c3d2/static/* $(HTML_OUTPUT)
#
# Static pages
# Generic rule for the static pages
# listed in STATIC_PAGES
#
$(HTML_OUTPUT)/schule.html:
$(call page2html, content/c3d2/pages/schule.xml , content/c3d2 content/c3d2/pages) > $(HTML_OUTPUT)/schule.html
$(HTML_OUTPUT)/unterstuetzen.html:
$(call page2html, content/c3d2/pages/unterstuetzen.xml , content/c3d2 content/c3d2/pages) > $(HTML_OUTPUT)/unterstuetzen.html
$(HTML_OUTPUT)/%.html: $(PAGES_DIR)/%.xml
$(call page2html, $<, content/c3d2 content/c3d2/templates content/c3d2/pages) > $@
#
# CALENDAR
#
$(HTML_OUTPUT)/kalender.html: $(PAGE_OUTPUT)/kalender.xml
$(call page2html, $(PAGE_OUTPUT)/kalender.xml, content/c3d2 content/c3d2/templates content/c3d2/pages) > $@
$(PAGE_OUTPUT)/kalender.xml: $(PAGE_OUTPUT)/news.xml
# First tranformation to unite calendar-only events and news items
# TODO: May be handled by different stylesheets.
$(call calendar2page, content/c3d2/calendar.xml, $(NEWS_OUTPUT) $(ITEMS_DIR)) > $(PAGE_OUTPUT)/calendar-summary.xml
# The actual calendar2page-transformation
$(call calendar2page, $(PAGE_OUTPUT)/calendar-summary.xml, $(NEWS_OUTPUT) $(ITEMS_DIR)) > $@
#
# NEWS
#
ITEMS_DIR=content/c3d2/items
# Points to a script or executable, which takes
# the directory containing the newsitems in xml-format
# as parameter and passes a corresponding list in xml-format
# to STDOUT
LIST_GENERATOR=scripts/generate-news-list.sh
# 1. Generate a list of all news items
# Transform all items into pages
$(PAGE_OUTPUT)/items/%.xml: $(ITEMS_DIR)/%.xml
mkdir -p $(PAGE_OUTPUT)/items/
$(call news2page, $<) > $@
# Transform the pages representing news items into HTML
$(HTML_OUTPUT)/news/%.html: $(PAGE_OUTPUT)/items/%.xml
mkdir -p $(HTML_OUTPUT)/news/
$(call page2html, $<, content/c3d2 content/c3d2/templates content/c3d2/pages) > $@
# Generate a list of all news items
# stored within $(ITEMS_DIR).
$(NEWS_OUTPUT)/news-list.xml:
$(LIST_GENERATOR) $(ITEMS_DIR) > $(NEWS_OUTPUT)/news-list.xml
# 2. Transform the news.xml-file into a page
# TODO: Replace PROCESSOR-call with a predefined procedure for news2page-transformation.
# Transform the news.xml-file into a page
$(PAGE_OUTPUT)/news.xml: $(NEWS_OUTPUT)/news-list.xml
$(call news2page, content/c3d2/news/overview.xml, content/c3d2/items) > $(PAGE_OUTPUT)/news.xml
# 3. Transform the news page into HTML
# Transform the news page into HTML
$(HTML_OUTPUT)/news.html: $(PAGE_OUTPUT)/news.xml
$(call page2html, output/page/news.xml , $(PAGE_OUTPUT) content/c3d2 content/c3d2/pages) > $(HTML_OUTPUT)/news.html
$(call page2html, output/page/news.xml , $(PAGE_OUTPUT) content/c3d2 content/c3d2/templates content/c3d2/pages) > $(HTML_OUTPUT)/news.html
clean:
rm -rf $(NEWS_OUTPUT)/* $(PAGE_OUTPUT)/* $(HTML_OUTPUT)/*

1901
content/c3d2/calendar.xml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
@ -9,13 +8,6 @@
<!--
### COMMON HTML STRUCTURE TEMPLATES ###
Dependencies (used templates and variables not specified in this file):
Templates:
- javascript
Variables:
- $baseurl
-->
<xsl:template name="common_html_head">
@ -39,46 +31,25 @@
<meta name="DC.Coverage" content="Dresden" />
<meta name="DC.Title" content="c3d2: Chaos Computer Club Dresden" />
<link rel="icon" type="image/png" href="{$baseurl}favicon.ico" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{$baseurl}news-rss.xml" />
<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{$baseurl}news-atom.xml" />
<link rel="stylesheet" title="Default" type="text/css" href="{$baseurl}style/default.css" />
<link rel="icon" type="image/png" href="favicon.ico" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="news-rss.xml" />
<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="news-atom.xml" />
<link rel="stylesheet" title="Default" type="text/css" href="style/default.css" />
<link rel="space-api" title="Hackerspace API Endpoint" type="application/json" href="http://www.hq.c3d2.de/spaceapi.json"/>
<link href="http://fonts.googleapis.com/css?family=Source+Sans+Pro:600|Open+Sans" rel="stylesheet" type="text/css" />
<xsl:comment>[if lt IE 9]&gt;
&lt;script src="<xsl:value-of select="$baseurl"/>script/ie-html5.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="script/ie-html5.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;![endif]</xsl:comment>
<xsl:if test="/page/calendar-summary">
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'calendar'"/>
</xsl:call-template>
</xsl:if>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'jquery-1.8.3.min'"/>
</xsl:call-template>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'jquery.dataset'"/>
</xsl:call-template>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'pentamedia-comments'"/>
</xsl:call-template>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'play-resources'"/>
</xsl:call-template>
<xsl:call-template name="make-script-tag">
<xsl:with-param name="name" select="'bitlove-enclosures'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="make-script-tag">
<!-- <xsl:template name="make-script-tag">
<xsl:param name="name"/>
<script src="{$baseurl}script/{$name}.js"
type="text/javascript" defer="defer">
<xsl:text>
</xsl:text>
</script>
</xsl:template>
</script>
</xsl:template> -->
</xsl:stylesheet>

View File

@ -6,11 +6,10 @@ please adjust the #navigation li:nth-child(...) rules in the CSS file.
-->
<navigation>
<file>news</file>
<file>schule</file>
<file>ueber_uns</file>
<file>kontakt</file>
<file>events</file>
<file>kalender</file>
<file>projekte</file>
<file>unterstuetzen</file>
<file>pentamedia</file>
<file>kontakt</file>
<file>downloads</file>
</navigation>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page id="downloads" pagetitle="Warez/Appz/Moviezzz" title="Warez">
<p>
Mitschnitte und Videos von unseren Veranstaltungen und aus dem chaosnahen
Umfeld kann man von unserem ftp-Server herunterladen:
</p>
<dl>
<dt>Per FTP</dt>
<dd><link>ftp://ftp.c3d2.de/</link></dd>
<dt>Per HTTP</dt>
<dd><link>http://ftp.c3d2.de/</link></dd>
<dt>Per rsync</dt>
<dd><link>rsync://ftp.c3d2.de/</link></dd>
</dl>
<p title="Podcast Feeds">
</p>
<dl>
<dt>Alle News</dt>
<dd>
<link href="news-atom.xml">ATOM</link> (<link href="news-archiv-atom.xml">Archiv-Feed</link>),
<link href="news-rss.xml">RSS</link> (<link href="news-archiv-rss.xml">Archiv-Feed</link>)
</dd>
<dt>OGG-Feeds</dt>
<dd><link href="pentacast-ogg.xml">Pentacast</link> (<link href="pentacast-ogg-archiv.xml">Archiv-Feed</link>)</dd>
<dt>MP3-Feeds</dt>
<dd><link href="podcast.xml">Alle Podcasts</link> (<link href="podcast-archiv.xml">Archiv-Feed</link>)</dd>
<dd><link href="pentaradio.xml">Pentaradio</link> (<link href="pentaradio-archiv.xml">Archiv-Feed</link>)</dd>
<dd><link href="pentacast.xml">Pentacast</link> (<link href="pentacast-archiv.xml">Archiv-Feed</link>)</dd>
<dd><link href="pentamusic.xml">Pentamusic</link> (<link href="pentamusic-archiv.xml">Archiv-Feed</link>)</dd>
<dd><link href="pentamedia.xml">Pentaradio+Pentacast+Pentamusic</link> (<link href="pentamedia-archiv.xml">Archiv-Feed</link>)</dd>
</dl>
<p title="Code">
Gemeinsame Projekte sind unter anderem an folgenden Stellen zu finden:
</p>
<ul>
<li><link href="http://git.c3d2.de/">git.c3d2.de</link></li>
<li><link href="https://github.com/c3d2">Github.com</link></li>
</ul>
</page>

View File

@ -2,7 +2,7 @@
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<?xml-stylesheet type="text/xsl" href="../xsl/html.xsl" ?>
<page title="Impressum">
<page id="impressum" title="Impressum">
<p>
Die Web-Seiten unter <link href="https://www.c3d2.de/">www.c3d2.de</link> sind eine Publikation des <link href="whois.html">Chaos Computer Club Dresden</link>. Jeglicher Inhalt ist den den jeweiligen Autoren zuzuschreiben. Links, die auf andere Server verweisen, sind nicht anzuklicken, bei Zuwiderhandlungen übernehmen wir keine Haftung. Copyright ist Aberglaube.
</p>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page id="kontakt" title="E-Mail" pagetitle="E-Mail">
<p title="Anfragen">
Anfragen an den Chaos Computer Club Dresden bitte an <link href="mailto:mail@c3d2.de">mail@c3d2.de</link>. Für Anfragen und Mitmachen beim "Chaos macht Schule"-Projekt bitte eine Mail an <link href="mailto:schule@c3d2.de">schule@c3d2.de</link>.
</p>
<p>
Diese Mailadressen werden von mehreren Mitgliedern gelesen und beantwortet.
</p>
<p title="Mailingliste">
Einschreiben und mitreden:
</p>
<p>
<link href="https://www.skyhub.de/cgi-bin/mailman/listinfo/c3d2">Seite der Mailingliste</link>
</p>
<p title="Versenden von Anhängen">
Wenn eine Datei groß ist oder nicht unbedingt jeden Empfänger interessiert, dann ist es besser diese auf einen Webserver hochzuladen und einen Link zu schicken.
Insbesondere sollte man darauf achten keine proprietären Dateiformate, also Dateien die nicht jeder ohne ein spezielles Programm öffnen kann, zu verwenden.
Siehe auch: <link href="http://www.gnu.org/philosophy/no-word-attachments.de.html">Wir können Word-Anhängen ein Ende machen</link> von Richard M. Stallman, Januar 2002
</p>
</page>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page title="Mailingliste">
<p>
Nun zu finden unter: <link href="kontakt.html">E-Mail</link>
</p>
</page>

182
content/c3d2/pages/muc.xml Normal file
View File

@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page pagetitle="Multi-User Chat" title="Chat">
<p>
Wir unterhalten uns in einem Chat auf Basis des Instant
Messaging-Systems
Jabber: <link href="xmpp:c3d2@chat.c3d2.de?join">c3d2@chat.c3d2.de</link>.
<link href="https://wiki.c3d2.de/Jabber_Infrastruktur">Hintergründe zu unserer Jabber-Infrastruktur</link>
erfährst du in unserem Wiki.
</p>
<!--p title="Chat mit persönlicher Einladung">
Wenn du bereits Jabber benutzt und online bist, dann kannst du
einfach deine Jabber-Id in Form von <em>benutzer@foobar.com</em>
hier eingeben und wir schicken dir dann unverzüglich eine
persönliche Einladung:
</p>
<form xmlns="http://www.w3.org/1999/xhtml"
action="http://anonxmpp.hq.c3d2.de/muc-invite">
<p>
<label for="invite-jid">Jabber-Id:</label>
<input id="invite-jid" name="jid" size="20"/>
<input value="Los!" type="submit"/>
</p>
</form-->
<p title="Chat im Browser">
<image title="Einfach mit dem Browser"
class="right">images/muc/browser.png</image>
Mit der Software
<link href="http://candy-chat.github.com/candy/">Candy</link>
verfügen wir über einen Client bei dem lediglich dein eigener
Browser mit unserem Jabber-Server kommuniziert. Du musst hier
lediglich einen Spitznamen eingeben und los gehts:
</p>
<!--form xmlns="http://www.w3.org/1999/xhtml"
action="https://anonxmpp.hq.c3d2.de/muckl/muckl.html">
<p>
<input name="room" value="0" type="hidden"/>
<label for="muckl-nick">Name:</label>
<input id="muckl-nick" name="nick" size="20"/>
<input value="Chat!" type="submit"/>
</p>
</form-->
<form xmlns="http://www.w3.org/1999/xhtml"
action="https://anonxmpp.hq.c3d2.de/candy/">
<p>
<label for="candy-nick">Name:</label>
<input id="candy-nick" name="nick" size="20"/>
<input value="Chat!" type="submit"/>
</p>
</form>
<p>
Candy benötigt JavaScript im Browser. Bei <em>NoScript</em>
bedeutet das, daß du <em>anonxmpp.hq.c3d2.de</em> freigeben musst.
</p>
<!--p title="Chat per Secure Shell">
<image title="Gewohnte Bequemlichkeit im Terminal"
class="right">images/muc/ssh.png</image>
Unter Linux und OS X könnte es am bequemsten sein, wenn du einfach
ein gutes, altes Terminal hernimmst und dich mit folgendem Befehl
zu einer ebenfalls bunten MUC-Schnittstelle verbindest:
</p>
<pre>ssh chat@ssh.hq.c3d2.de</pre>
<p>
Danach wird nach deinem Spitznamen gefragt und du kannst
loschatten. Das Programm dahinter
ist <link href="http://github.com/astro/jerry/blob/master/littlemuc.rb">ein
kleines Ruby-Skript</link>.
</p-->
<p title="Chat mit einem Jabber-Client">
<image title="So zum Beispiel in Gajim"
class="right">images/muc/gajim.png</image>
Wenn du bereits einen Account auf irgendeinem Jabber-Server hast,
kannst du an der Konferenz mit den meisten Client-Programmen
teilnehmen.
</p>
<dl>
<dt><link href="http://www.gajim.org/">Gajim</link></dt>
<dd>Actions
→ Join Groupchat...
→ Join New Groupchat
→ Room: <em>c3d2@chat.c3d2.de</em></dd>
<dt><link href="http://www.psi-im.org/">Psi</link></dt>
<dd>Ψ
→ Join Groupchat
→ Host: <em>chat.c3d2.de</em>
→ Room: <em>c3d2</em></dd>
<dt><link href="http://tkabber.jabber.ru/">Tkabber</link></dt>
<dd>Services
→ Join group...
→ Group: <em>c3d2</em> Server: <em>chat.c3d2.de</em></dd>
<dt><link href="http://www.pidgin.im/">Pidgin</link></dt>
<dd>Buddies
→ Join a Chat...
→ Room: <em>c3d2</em> Server: <em>chat.c3d2.de</em></dd>
<dt><link href="http://adium.im/">Adium</link></dt>
<dd>Ablage
→ gehe zu Chat
→ Raumname: <em>c3d2</em> Server: <em>chat.c3d2.de</em></dd>
<dt><link href="http://mcabber.com/">mcabber</link></dt>
<dd>/room join c3d2@chat.c3d2.de <em>MeinName</em></dd>
<dt><link href="http://www.irssi.org/">irssi</link> mit <link href="http://cybione.org/~irssi-xmpp/">irssi-xmpp</link></dt>
<dd>/join c3d2@chat.c3d2.de/<em>MeinName</em></dd>
<dt><link href="http://www.bitlbee.org/">BitlBee</link></dt>
<dd>/chat add <em>AccountId</em> c3d2@chat.c3d2.de</dd>
<dd>AccountId: ID des Jabber-Accounts in BitlBee (→ <em>account list</em>)</dd>
<dd>Nickname, Auto-Join, etc.: channel <em>ChannelId</em> set [<em>Key Value</em>]</dd>
<dd>/join #c3d2</dd>
</dl>
<p title="Chat mit einem IRC-Client">
Beispielsweise mit <link href="http://xchat.org/">XChat</link>:
<image title="IRC, mit den besten Chats der 80er und 90er"
class="right">images/muc/irc.png</image>
</p>
<pre>/sslserver irc.hq.c3d2.de 6668
/join #c3d2</pre>
<dl>
<dt>Host</dt>
<dd>irc.hq.c3d2.de</dd>
<dt>Port</dt>
<dd>6667</dd>
<dt>SSL Port</dt>
<dd>6668</dd>
<dt>Channel</dt>
<dd>#c3d2</dd>
</dl>
<p title="Hinweise zu unserer Jabber-Infrastruktur">
Im Gegensatz zu kommerziellen Anbietern können wir keine hohe
Verfügbarkeit garantieren. Da uns unsere Kommunikation wichtig
ist, versuchen wir natürlich unser bestes. Ebenfalls versuchen wir
die Privatsphäre der Nutzer so gut wie möglich zu wahren.
</p>
<dl>
<dt>icq.hq.c3d2.de</dt>
<dd>
Wenn du deine häufigsten Kommunikationspartner von den Vorteilen
einer offenen Kommunikationsinfrastruktur überzeugt hast, dann
besteht die Möglichkeit mit ICQ trotz ausschliesslicher
Benutzung von Jabber auf deiner Seite zu kommunizieren. Soetwas
nennt sich Transport beziehungsweise Gateway und
unter <link href="xmpp:icq.hq.c3d2.de?register">icq.hq.c3d2.de</link>
betreiben
wir <link href="http://code.google.com/p/pyicqt/">einen
solchen</link> öffentlich. Du kannst ihn auch benutzen wenn du
deinen Jabber-Account auf einem anderen Server hast.
</dd>
<dt>SSL/TLS</dt>
<dd>
Wir wollen versuchen, jegliche Jabber-Kommunikation ohne
Verschlüsselung mit Fehlerbenachrichtigungen abzulehnen. Das
gilt leider nur für direkte Verbindungen zu unseren
Diensten. Wenn du mit jemandem auf anderen Servern kommunizierst
ist das ausserhalb unseres Einflussbereiches. Wir empfehlen die
ständige Verwendung von PGP, OTR oder E2E als
Ende-zu-Ende-Verschlüsselung mit deinen
Kommunikationspartnern. Wenn Eve &amp; Mallory unseren Server
aufmachen lachen sie über SSL.
</dd>
<dt>IPv6</dt>
<dd>
Jegliche Dienste sind erreichbar über das Internetprotokoll der
Zukunft. Leider ist dabei Stabilität nicht immer gegeben und es
kann zu Verzögerungen kommen wenn vergeblich versucht wird eine
Verbindung über IPv6 herzustellen. Unser Tunnelausgang befindet
sich bei <link href="http://sixxs.net/">SixXS</link>.
</dd>
<dt>Backup</dt>
<dd>
Bei Erreichbarkeitsschwankungen unserer Dienste weichen wir auf
<link
href="xmpp:c3d2@conference.jabber.ccc.de?join">c3d2@conference.jabber.ccc.de</link>
aus.
</dd>
</dl>
</page>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<page id="projekte" title="Projekte">
<subnavigation>
<file>schule</file>
<file>space</file>
<file>wiki</file>
</subnavigation>
<p>
Hier finden sich alle Informationen rund um das Chaos macht Schule Projekt in Dresden.
</p>
<p>
Die Folien für den Projekttag am 3. Juli im Erzgebirge finden sich unter <link href="https://github.com/c3d2/cms-erzgebirge">c3d2-github: cms-erzgebirge</link>.
</p>
<p>
Die Folien der 18. Schulinformatikertagung zum Thema "Umgang mit Sozialen Netzwerken" können <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken.pdf">hier heruntergeladen werden</link>. Außerdem haben wir eine <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken-appendix.pdf">Liste mit ergänzenden Links zu den Folien</link> fertig gemacht. Die Tex-Sourcen befinden sich in unserem <link href="https://github.com/c3d2/informatiklehrertagung">c3d2-github: informatikerlehrertagung</link>.
</p>
<p>
Die Folien der 19. Schulinformatikertagung zum Thema "Freie Lehr- und Lernmaterialien" können <link href="http://ftp.c3d2.de/misc/cms/freie-lehr-lernmaterialien.pdf">hier heruntergeladen werden</link>. Die Tex-Sourcen befinden sich in unserem <link href="https://github.com/c3d2/sit-2013">c3d2-github: sit-2013</link>.
</p>
<dl>
<dt>Für Anfragen oder zum mitmachen bitte eine E-Mail an:</dt>
<dd><link href="mailto:schule@c3d2.de">schule at c3d2 dot de</link></dd>
</dl>
</page>

View File

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page id="schule" title="Schule">
<page pagetitle="Chaos macht Schule Dresden" title="Schule">
<p>
Hier finden sich alle Informationen rund um das Chaos macht Schule Projekt in Dresden.
</p>
@ -8,7 +10,7 @@
Die Folien für den Projekttag am 3. Juli im Erzgebirge finden sich unter <link href="https://github.com/c3d2/cms-erzgebirge">c3d2-github: cms-erzgebirge</link>.
</p>
<p>
Die Folien der 18. Schulinformatikertagung zum Thema "Umgang mit Sozialen Netzwerken" können <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken.pdf">hier heruntergeladen werden</link>. Außerdem haben wir eine <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken-appendix.pdf">Liste mit ergänzenden Links zu den Folien</link> fertig gemacht. Die Tex-Sourcen befinden sich in unserem <link href="https://github.com/c3d2/informatiklehrertagung">c3d2-github: informatikerlehrertagung</link>.
Die Folien der 18. Schulinformatikertagung zum Thema "Umgang mit Sozialen Netzwerken" können <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken.pdf">hier heruntergeladen werden</link>. Außerdem haben wir eine <link href="http://ftp.c3d2.de/misc/cms/umgang-m-soz-netzwerken-appendix.pdf">Liste mit ergänzenden Links zu den Folien</link> fertig gemacht. Die Tex-Sourcen befinden sich in unserem <link href="https://github.com/c3d2/informatiklehrertagung">c3d2-github: informatiklehrertagung</link>.
</p>
<p>
Die Folien der 19. Schulinformatikertagung zum Thema "Freie Lehr- und Lernmaterialien" können <link href="http://ftp.c3d2.de/misc/cms/freie-lehr-lernmaterialien.pdf">hier heruntergeladen werden</link>. Die Tex-Sourcen befinden sich in unserem <link href="https://github.com/c3d2/sit-2013">c3d2-github: sit-2013</link>.

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page title="Hackerspace">
<p>
<!-- status.png wird über space-api von einem server (auf pfade, definiert in json) umgeleitet -->
<image class="spacestatus" title="Aktueller Öffnungszustand">/status.png</image>
Wir sind in wesentlich größere Räume gezogen. Damit gibt es
bald mehr Platz für spannende Projekte und Hackerkultur. Wir
suchen sowohl personelle als auch <link
href="unterstuetzen.html">finanzielle Unterstützung</link>.
</p>
<p title="Wegbeschreibung">
Um in die <em>Grand Chaos Head Quarters</em> zu gelangen, sollte
der Nordeingang des Bürogebäudes Lingnerallee genommen
werden. Dieser wird gegen 18:00 Uhr geschlossen; für diesen Fall
gibt es neben dem Kartenleser eine Klingel, welche sporadisch
funktioniert. Als Fallback kannst du dich per <link
href="/muc.html">Chat</link> melden oder <link
href="tel:+4935148484999">(0351) 48 48 49 99</link> anrufen. Ist
der Nordeingang besiegt, musst du nur noch links abbiegen und nach
der ersten Glastür rechts klingeln (Nr. 3021).
</p>
<p><link href="images/hq/lingerhaus-gross.jpg"><image title="Vogelperspektive">images/hq/lingerhaus-klein.jpg</image></link></p>
<p title="Ausstattung">
</p>
<ul>
<li>IPv4- &amp; IPv6-Internet über IEEE802.3ab und IEEE802.11n</li>
<li>Kühlschrank mit Club Mate, Spinat, Eis und TkPizza</li>
<li>Pizzaofen, Mikrowelle, Toaster, Kaffeeautomat</li>
<li>Sofas, Sessel, Tische, Stühle</li>
<li>Geselligkeit und Spaß am Gerät</li>
<li>Eine Bibliothek toter Baum</li>
<li>Eine lokale Cloud</li>
<li>Stereoanlage über Pulseaudio, externe Bildschirme, bunte Lichter</li>
<li>Werkzeug, Lötkolben, Gaffer Tape, Elektronikschrott</li>
</ul>
<p>
Schau auch im Wiki:
</p>
<ul>
<li><link href="https://wiki.c3d2.de/Man_hq">man hq</link></li>
<li><link href="https://wiki.c3d2.de/HQ/Wunschliste">Wunschliste</link></li>
</ul>
<p title="Neue Impressionen">
<link href="https://media.c3d2.de/u/_john/m/h4-kerz-view/">
<image title="Lounge/Weltraum">//c3d2.de/mgoblin_media/media_entries/95/hackers_view2.jpg</image>
</link>
<link href="https://media.c3d2.de/u/_john/m/regale-harren-der-dinge-die-da-kommen-im-dunkeln/">
<image title="Werkstatt">//c3d2.de/mgoblin_media/media_entries/100/regale_im_dunkeln.jpg</image>
</link>
</p>
<p>
Neue Bilder werden gelegentlich auf <link
href="https://media.c3d2.de/">media.c3d2.de</link> geladen.
</p>
<p title="Alte Impressionen">
Im November 2013 sind wir aus unseren alten, kleinen Räumen
ausgezogen. So sah es dort aus:
</p>
<p>
<image title="Hackatmosphäre">images/hq/old1.jpg</image>
<image title="LED-Gebastel">images/hq/old2.jpg</image>
<image title="Raspberry Pi im Zustandsschalter">images/hq/schalter.jpg</image>
</p>
<!--
Im Web:
* hackerspaces.org
* coderwall
-->
</page>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page title="Whois" pagetitle="Whois C3D2?">
<p title="Wohin? Woher? Weshalb? C3D2?">
Der CCC Dresden (C3D2) ist eine Gruppe von Leuten, die Spaß am kreativen Umgang mit Informationstechnologie haben.
</p>
<p>
Wir finden es spannend, die Funktionsweise informationsverarbeitender Systeme zu erforschen und zu verstehen, um diese zu nutzen und zu verbessern. Dieses Interesse und das damit gewonnene Wissen teilen wir freiheitlich. Dies ist nur über einen freien Zugang zu Kommunikation möglich, für den wir uns einsetzen.
</p>
<p>
Viele Technologien haben direkten oder indirekten Einfluss auf unsere Gesellschaft. Daher versuchen wir, diese auf technischem als auch auf sozialem Gebiet zu untersuchen. Wichtig ist uns dabei die Achtung der Bürgerrechte, insbesondere des Rechts auf informationelle Selbstbestimmung.
</p>
<p>
Wir verstehen uns als Plattform Gleichgesinnter und bilden den
östlichsten Knotenpunkt des <link href="https://www.ccc.de/">Chaos
Computer Clubs</link> in Deutschland.
</p>
<p>
Mitmachen kann bei uns jeder. Besucher finden uns bei regelmäßigen <link href="treff.html">Treffen</link>, <link href="events.html">öffentlichen Veranstaltungen</link> oder an <link href="muc.html">verschiedenen</link> <link href="wiki.html">Plätzen</link> des <link href="mailingliste.html">Internets</link>.
</p>
<p title="Where to? Where from? Why? C3D2?">
The CCC Dresden (C3D2) is a group of thinking individuals who enjoy
having fun with the creative use of information technology.
</p>
<p>
We like to study and find out the way information processing
systems work, to use or enhance them, in any way whatsoever. The
knowledge we obtain is shared in a free manner. Of course this is
only possible with free access to communication, for which we
campaign.
</p>
<p>
Technology has a huge direct or indirect influence to our society,
which is why we try to investigate it on a technical and social
basis. For us it is important to respect the peoples rights,
exceptionally the right to informational self-determination.
</p>
<p>
We like to see us as a platform for like-minded people and form the
easternmost node of the Chaos Computer Club in Germany.
</p>
<p>
Everyone is allowed to participate. Visitors may join us on regular
meetings, public events or on various places around the internet.
</p>
</page>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "http://www.c3d2.de/dtd/c3d2web.dtd">
<page title="Wiki" pagetitle="WikiWikiWeb">
<!--p>
Bitte beachte die allgemeinen Hinweise, wie Du im <link href="https://wiki.c3d2.de/">c3d2-Wiki</link> arbeiten solltest. Das Wiki arbeitet nur unter https.
</p-->
<p>
Jeder ist eingeladen, im <link href="https://wiki.c3d2.de/">c3d2-Wiki</link>
Inhalte zu bearbeiten, kreative Beiträge hinzuzufügen, ...
</p>
<p>
Viel Spaß!
</p>
<p>
P.S.: Ein Wiki ist ein Web-basiertes System, mit dem man schnell Web-Seiten generieren und editieren kann. Eine Revisionskontrolle zeigt rückwirkend alle Änderungen.
</p>
</page>

View File

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<!-- ## Basic transformation include ## -->
<xsl:include href="page2html.xsl" />
<!-- ## Custom template includes ## -->
<xsl:include href="common.xsl" />
<!--
### PAGE TEMPLATE ###
Dependencies (used templates and variables not specified in this file):
Templates:
- navitems (consider: get the current active link via querying the page title or via param)
- header (may be renamed to common_html_head)
- footer (common_page_footer)
Variables:
- $baseurl
- $common_title_prefix
- $common_path
-->
<xsl:template name="main">
<!-- TODO: Include proper DTD -->
<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>
<html lang="de" xml:lang="de">
<!-- ## HTML HEAD ## -->
<head>
<!-- # Custom include #
# Include the template containing
# common header data like meta tags,
# links and javascript-tags
-->
<xsl:call-template name="common_html_head" />
<!-- # Basic include #
# Add site-specific
# includes
-->
<xsl:call-template name="head_include" />
<title>
&lt;&lt;&lt;/&gt;&gt; Chaos Computer Club Dresden | c3d2
<!-- # Basic include # -->
<xsl:call-template name="page_title" />
</title>
</head>
<!-- ## HTML BODY ## -->
<body>
<div id="page">
<!-- # PAGE HEAD # -->
<div id="head">
<!-- TODO: Include Logo-Artwork -->
<div id="title_logo">
<img src="images/c3d2_title.png" alt="C3D2" title="C3D2" />
</div>
<xsl:call-template name="navigation" />
</div>
<section id="content">
<!-- Small hack to enable test for empty page title -->
<xsl:variable name="title">
<xsl:call-template name="page_title" />
</xsl:variable>
<xsl:if test="$title != ''">
<h2>
<xsl:value-of select="$title" />
</h2>
</xsl:if>
<!-- # Basic include # -->
<xsl:call-template name="page_body" />
</section>
<!-- # PAGE FOOTER # -->
<footer id="footer">
<!-- ### Footer ### -->
<ul>
<li>
<!-- Creative Commons License -->
<xsl:comment>
<xsl:text> Creative Commons License </xsl:text>
</xsl:comment>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/de/deed.de">
<img src="images/cc-somerights20.png"
width="88" height="31"
alt="Creative Commons License"
title="Creative Commons Attribution-ShareAlike 2.0 Germany License" />
</a>
<xsl:comment>
<xsl:text>
&lt;rdf:RDF xmlns="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
&lt;Work rdf:about=""&gt;
&lt;dc:type rdf:resource="http://purl.org/dc/dcmitype/Interactive" /&gt;
&lt;license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/de/" /&gt;
&lt;/Work&gt;
&lt;License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/de/"&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/ShareAlike" /&gt;
&lt;/License&gt;
&lt;/rdf:RDF&gt;
</xsl:text>
</xsl:comment>
</li>
<li>
<a href="http://www.w3.org/html/logo/">
<img src="images/html5-badge-h-multimedia-semantics.png"
width="83" height="32"
alt="HTML5 Powered with Multimedia, and Semantics"
title="HTML5 Powered with Multimedia, and Semantics"/>
</a>
</li>
</ul>
<small class="hidden">
Cover, Concealment, Camouflage, Denial and Deception
</small>
</footer>
</div>
</body> <!-- ## END OF HTML BODY ## -->
</html>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom"
exclude-result-prefixes="xsl date">
<xsl:output method="xml"
version="1.0"
encoding="utf-8"
indent="yes"/>
<xsl:include href="news2rss.xsl" />
<xsl:param name="archivefeed"/>
<xsl:template name="main">
<channel>
<title>www.c3d2.de Newsfeed</title>
<link>http://www.c3d2.de/</link>
<description>Neues aus dem Chaos Computer Club Dresden</description>
<language>de-de</language>
<image>
<title>Chaosknoten</title>
<url><xsl:value-of select="$baseurl"/>images/ck.png</url>
<link>http://www.c3d2.de/</link>
</image>
<xsl:if test="$archivefeed">
<atom:link rel="prev-archive" href="{$archivefeed}"/>
</xsl:if>
<!-- Insert the actual rss entries, provided by
news2rss-template -->
<xsl:call-template name="rss_entries">
<xsl:with-param name="prefix" select="$prefix" />
</xsl:call-template>
</channel>
</xsl:template>
</xsl:stylesheet>

View File

@ -53,7 +53,7 @@
<hook NAME="AutomaticEdgeColor" COUNTER="2"/>
<node TEXT="Initial-/Zwischenrepr&#xe4;sentation (XML)" POSITION="left" ID="ID_1520497944" CREATED="1390061786793" MODIFIED="1390064697158">
<edge COLOR="#ff00ff"/>
<node TEXT="&lt;item&gt; (News)" ID="ID_1264409885" CREATED="1390062131624" MODIFIED="1390062685820"><richcontent TYPE="DETAILS">
<node TEXT="&lt;item&gt; (News)" ID="ID_1264409885" CREATED="1390062131624" MODIFIED="1394225773938"><richcontent TYPE="DETAILS">
<html>
<head>
@ -61,16 +61,20 @@
</head>
<body>
<p>
title
Attribute: title, date, author
</p>
<p>
date
</p>
<p>
author
Unterst&#252;tzt alle Elemente, die f&#252;r die Beschreibung
</p>
<p>
einer einzelnen Neuigkeit verwendet werden.
</p>
</body>
</html>
</richcontent>
<node TEXT="&lt;image&gt;" ID="ID_657516672" CREATED="1390062165575" MODIFIED="1390062703580"><richcontent TYPE="DETAILS">
@ -109,7 +113,7 @@
</node>
<node TEXT="&lt;iframe&gt;" ID="ID_2309966" CREATED="1390062637213" MODIFIED="1390062639572"/>
</node>
<node TEXT="&lt;page&gt; (Website)" ID="ID_1506497668" CREATED="1390062848053" MODIFIED="1390062876994"><richcontent TYPE="DETAILS">
<node TEXT="&lt;page&gt; (Website)" ID="ID_1506497668" CREATED="1390062848053" MODIFIED="1394225677758"><richcontent TYPE="DETAILS">
<html>
<head>
@ -117,10 +121,20 @@
</head>
<body>
<p>
title
Attribute: title, navtitle
</p>
<p>
</p>
<p>
Unterst&#252;tzt alle Elemente, die prinzipiell in jeder Seite verwendet
</p>
<p>
werden, wie Abs&#228;tze, Bilder, Auflistungen etc.
</p>
</body>
</html>
</richcontent>
<node TEXT="&lt;p&gt;" ID="ID_1937431727" CREATED="1390063000459" MODIFIED="1390063001874">
<node TEXT="&lt;link&gt;" ID="ID_1198651603" CREATED="1390063058282" MODIFIED="1390063060169"/>
@ -157,10 +171,7 @@
</node>
<node TEXT="Transformation" POSITION="right" ID="ID_1332839181" CREATED="1390062743713" MODIFIED="1390062759885">
<edge COLOR="#0000ff"/>
<node TEXT="News -&gt; Website" ID="ID_1639117814" CREATED="1390062907953" MODIFIED="1390062945478">
<node TEXT="Einzelnes Newsitem -&gt; Website" ID="ID_985172701" CREATED="1390734978136" MODIFIED="1390735018323"/>
<node TEXT="News-Liste -&gt; Website" ID="ID_1549568980" CREATED="1390735018872" MODIFIED="1390735031371"/>
</node>
<node TEXT="News -&gt; Website" ID="ID_1639117814" CREATED="1390062907953" MODIFIED="1390062945478"/>
<node TEXT="News -&gt; RSS" ID="ID_1007127" CREATED="1390062931816" MODIFIED="1390062935985"/>
<node TEXT="Website -&gt; HTML" ID="ID_1482437690" CREATED="1390062936517" MODIFIED="1390062951859">
<node TEXT="common.xsl" ID="ID_1223423749" CREATED="1389816013910" MODIFIED="1389817108553"><richcontent TYPE="DETAILS">
@ -214,6 +225,65 @@
</richcontent>
</node>
</node>
<node TEXT="page.xsl" ID="ID_818320483" CREATED="1389814767464" MODIFIED="1389815018654">
<node TEXT="&lt;page&gt;" ID="ID_1324983812" CREATED="1389815019622" MODIFIED="1389815822001"><richcontent TYPE="DETAILS">
<html>
<head>
</head>
<body>
<p>
Dient als Ausgangspunkt f&#252;r den Aufbau der Seite und bindet
</p>
<p>
statische, seitenunabh&#228;ngige Inhalte ein (z.B. Meta-Tags).
</p>
</body>
</html>
</richcontent>
</node>
<node TEXT="&lt;include&gt;" ID="ID_1890623875" CREATED="1389815429962" MODIFIED="1389815683940"><richcontent TYPE="DETAILS">
<html>
<head>
</head>
<body>
<p>
Erm&#246;glicht seitenabh&#228;ngige, nachtr&#228;gliche Einbindung
</p>
<p>
von Javascript und CSS-Stilen
</p>
</body>
</html>
</richcontent>
</node>
<node TEXT="&lt;body&gt;" ID="ID_837057519" CREATED="1389815075046" MODIFIED="1389815761539"/>
</node>
<node TEXT="Includes" ID="ID_938261128" CREATED="1394228710972" MODIFIED="1394228922188"><richcontent TYPE="DETAILS">
<html>
<head>
</head>
<body>
<p>
Erweitern transformation; sorgen
</p>
<p>
f&#252;r kleinere XSL-Dateien
</p>
</body>
</html>
</richcontent>
<node TEXT="entities.xsl" ID="ID_77137436" CREATED="1389815847190" MODIFIED="1389816011765">
<node TEXT="&lt;image&gt;" ID="ID_113029427" CREATED="1389815981461" MODIFIED="1389815988794"/>
<node TEXT="&lt;link&gt;" ID="ID_1393610688" CREATED="1389815989342" MODIFIED="1389815992996"/>
<node TEXT="..." ID="ID_1677264787" CREATED="1389815993485" MODIFIED="1389815995112"/>
</node>
<node TEXT="navigation.xsl" ID="ID_2227702" CREATED="1389821472165" MODIFIED="1389821547511"><richcontent TYPE="DETAILS">
<html>
@ -252,13 +322,7 @@
</node>
<node TEXT="&lt;item&gt;" ID="ID_1392504189" CREATED="1389821559356" MODIFIED="1389821577506"/>
</node>
<node TEXT="entities.xsl" ID="ID_77137436" CREATED="1389815847190" MODIFIED="1389816011765">
<node TEXT="&lt;image&gt;" ID="ID_113029427" CREATED="1389815981461" MODIFIED="1389815988794"/>
<node TEXT="&lt;link&gt;" ID="ID_1393610688" CREATED="1389815989342" MODIFIED="1389815992996"/>
<node TEXT="..." ID="ID_1677264787" CREATED="1389815993485" MODIFIED="1389815995112"/>
</node>
<node TEXT="page.xsl" ID="ID_818320483" CREATED="1389814767464" MODIFIED="1389815018654">
<node TEXT="&lt;page&gt;" ID="ID_1324983812" CREATED="1389815019622" MODIFIED="1389815822001"><richcontent TYPE="DETAILS">
<node TEXT="news.xsl" ID="ID_1106368618" CREATED="1394226129823" MODIFIED="1394226165696"><richcontent TYPE="DETAILS">
<html>
<head>
@ -266,33 +330,16 @@
</head>
<body>
<p>
Dient als Ausgangspunkt f&#252;r den Aufbau der Seite und bindet
Erweiterung der Transformation um
</p>
<p>
statische, seitenunabh&#228;ngige Inhalte ein (z.B. Meta-Tags).
Elemente wie &lt;item-list&gt; etc.
</p>
</body>
</html>
</richcontent>
</node>
<node TEXT="&lt;include&gt;" ID="ID_1890623875" CREATED="1389815429962" MODIFIED="1389815683940"><richcontent TYPE="DETAILS">
<html>
<head>
</head>
<body>
<p>
Erm&#246;glicht seitenabh&#228;ngige, nachtr&#228;gliche Einbindung
</p>
<p>
von Javascript und CSS-Stilen
</p>
</body>
</html>
</richcontent>
</node>
<node TEXT="&lt;body&gt;" ID="ID_837057519" CREATED="1389815075046" MODIFIED="1389815761539"/>
</node>
</node>
</node>

31
doc/README.md Normal file
View File

@ -0,0 +1,31 @@
General concept:
- (TBD) Structure of XML-files is predefined by the
DTDs in the dtd-folder, which contains all the entities
supported by the framework.
- Basic transformations offered by framework
-> offer general-purpose transformations
-> located in transformation
- Domain-specific XSL-Templates (e.g. html.xsl, rss.xsl)
-> should normally only include a template with name "main", which contains
the basic domain-specific structure for the created objects of this type
-> located in content/<mydomain>/templates
-> definition of own templates is possible, but may cause name collisions with
the imported templates provided by the framework
-> each template may include the appropriate transformation template
from the framework and use the provided templates
Process for final formats (such as html or rss):
1. Transformation initiated by calling "xsltproc $PATHS {html,rss}.xsl <mydocument>.xml
2. Framework-included template matches root element, may do some preparations (as in news2rss.xsl)
and call the "main"-template.
3. The "main"-template defines the common structure and calls the needed templates
provided by the framework at the needed places.
Changelog to master (besides new architecture):
news2rss:
- Transformation of <item>:
-> removed insertion of <author> and <category> to make code more generic
-> <author> may in future be taken directly from the @author-attribute in the xml-file

12
doc/ToDo.txt Normal file
View File

@ -0,0 +1,12 @@
Idee:
- Grobstruktur der Seite in separates XSL-Template auslagern
-> html.xsl
-> durch page2html.xsl bereitgestellte Templates:
* head_include - Seitenspezifische Einbindung von <head>-Elementen wie links, stylesheets, scripts
* page_title - Seitenspezifischer Titel
* navigation - Navigation
* page_body - Seitenspezifischer Inhalt
-> weitere eigene templates natürlich erlaubt

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
# prevent output of "$1/*.xml" as file
# if the target directory is empty

View File

@ -0,0 +1,282 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
exclude-result-prefixes="xsl date">
<xsl:output method="xml"
version="1.0"
encoding="utf-8"
doctype-system="http://www.c3d2.de/dtd/c3d2web.dtd"
indent="yes"/>
<xsl:include href="include/ddate.xsl" />
<xsl:template match="/calendar">
<page id="kalender" title="Kalender">
<calendar-summary>
<!-- Events aus events.xml ziehen -->
<xsl:apply-templates select="event"/>
<!-- Events aus den News ziehen -->
<xsl:for-each select="document('news.xml')/page/news/newsfile">
<xsl:apply-templates select="document(concat('../', .))/item/event">
<xsl:with-param name="link" select="concat(substring-before(substring-after(., 'content/'), '.xml'), '.html')"/>
</xsl:apply-templates>
</xsl:for-each>
</calendar-summary>
</page>
</xsl:template>
<xsl:template match="event">
<xsl:param name="link"/>
<!-- Events must have started at least one year ago -->
<xsl:variable name="minstart" select="date:add(date:date-time(), '-P366D')"/>
<xsl:if test="starts-with(date:difference(start, $minstart), '-')">
<event>
<title>
<xsl:choose>
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
<xsl:when test="../@title"><xsl:value-of select="../@title"/></xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">Event with no title!</xsl:message>
</xsl:otherwise>
</xsl:choose>
</title>
<start><xsl:value-of select="start"/></start>
<end>
<xsl:choose>
<xsl:when test="end">
<xsl:value-of select="end"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="start"/>
</xsl:otherwise>
</xsl:choose>
</end>
<xsl:if test="location">
<location><xsl:value-of select="location"/></location>
</xsl:if>
<link>
<xsl:choose>
<xsl:when test="link"><xsl:value-of select="link"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$link"/></xsl:otherwise>
</xsl:choose>
</link>
<!-- TODO: Link -->
</event>
</xsl:if>
</xsl:template>
<xsl:template match="/page/calendar-summary">
<table class="calendar">
<tr>
<th>Montag</th>
<th>Dienstag</th>
<th>Mittwoch</th>
<th>Donnerstag</th>
<th>Freitag</th>
<th>Samstag</th>
<th>Sonntag</th>
</tr>
<xsl:call-template name="output-week">
<xsl:with-param name="date">
<xsl:call-template name="get-past-monday">
<xsl:with-param name="date" select="concat(date:year(date:date()), '-', format-number(date:month-in-year(date:date()), '00'), '-01')"/>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="stopmonth" select="date:month-in-year(date:add(date:date(), 'P2M'))"/>
</xsl:call-template>
</table>
<p>
Der Kalender ist auch im <a href="ical.ics">iCal-</a>,
<a href="xcal.xml">XCal-</a> und <a
href="reminders">remind-Format</a> verfügbar.
</p>
</xsl:template>
<xsl:template name="output-week">
<xsl:param name="date"/>
<xsl:param name="stopmonth"/>
<tr>
<xsl:call-template name="output-day">
<xsl:with-param name="date" select="$date"/>
</xsl:call-template>
</tr>
<xsl:variable name="nextweek" select="date:add($date, 'P7D')"/>
<xsl:if test="date:month-in-year($nextweek) != $stopmonth">
<xsl:call-template name="output-week">
<xsl:with-param name="date" select="$nextweek"/>
<xsl:with-param name="stopmonth" select="$stopmonth"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--
td/@class ist wie folgend aufgebaut:
* Beginnt immer mit 'cal'
* Dann 'week' für Wochentage, 'sun' für Sonntage
* '1' für aktuellen Monat, '2' für folgenden Monat, '3' für sonstige Monate
-->
<xsl:template name="output-day">
<xsl:param name="date"/>
<td>
<xsl:attribute name="class">
<xsl:text>cal</xsl:text>
<xsl:choose>
<xsl:when test="date:day-in-week($date) = 1">sun</xsl:when>
<xsl:otherwise>week</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="date:month-in-year($date) = date:month-in-year(date:date())">1</xsl:when>
<xsl:when test="date:month-in-year($date) = date:month-in-year(date:add(date:date(), 'P1M'))">2</xsl:when>
<xsl:otherwise>3</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<!-- vv01f: added id to jump to a specific date with links and hashtag liek {$month}-{$day} //-->
<xsl:attribute name="id">
<xsl:value-of select="concat('eventday-', date:month-in-year($date), '-', date:day-in-month($date))"/>
</xsl:attribute>
<xsl:variable name="ddate">
<xsl:call-template name="ddate">
<xsl:with-param name="date" select="$date"/>
</xsl:call-template>
</xsl:variable>
<span class="day" title="{$ddate}"
id="calendar-{date:year($date)}-{date:month-in-year($date)}-{date:day-in-month($date)}"
>
<xsl:value-of select="date:day-in-month($date)"/>
</span>
<ul>
<xsl:variable name="dholiday">
<xsl:call-template name="ddate-holiday">
<xsl:with-param name="date" select="$date"/>
</xsl:call-template>
</xsl:variable>
<li><xsl:value-of select="normalize-space($dholiday)"/></li>
<xsl:for-each select="event">
<xsl:sort select="start"/>
<xsl:variable name="start">
<xsl:call-template name="strip-time-from-date">
<xsl:with-param name="date" select="start"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="end">
<xsl:call-template name="strip-time-from-date">
<xsl:with-param name="date" select="end"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="date">
<xsl:call-template name="strip-time-from-date">
<xsl:with-param name="date" select="$date"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="(date:seconds($start) &lt;= date:seconds($date))
and (date:seconds($date) &lt;= date:seconds($end))">
<li>
<a>
<!-- a/@href -->
<xsl:if test="string-length(link) &gt; 0">
<xsl:attribute name="href">
<xsl:value-of select="link" />
</xsl:attribute>
</xsl:if>
<!-- a/@title -->
<xsl:attribute name="title">
<xsl:if test="string-length(location) &gt; 0">
<xsl:value-of select="concat('Ort: ', location)"/>
</xsl:if>
<xsl:if test="string-length(location) = 0">
<xsl:value-of select="concat('Ort: ', 'GCHQ, Lingnerallee 3, 01069 Dresden')"/>
</xsl:if>
<xsl:if test="string-length(date:time(start)) &gt; 0 or string-length(date:time(end)) &gt; 0">
<xsl:if test="date:day-in-month($date) = date:day-in-month(start) or date:day-in-month($date) = date:day-in-month(end)">
<xsl:value-of select="concat('&#xA;', 'Zeit:')" disable-output-escaping="yes"/>
<xsl:if test="date:day-in-month($date) = date:day-in-month(start) and string-length(date:time(start)) &gt; 0 and substring(date:time(start),1,5) != ''">
<xsl:value-of select="concat(' ab ', substring(date:time(start),1,5))"/>
</xsl:if>
<xsl:if test="date:day-in-month($date) = date:day-in-month(end) and string-length(date:time(end)) &gt; 0 and substring(date:time(end),1,5) != '' and substring(date:time(end),1,5) != substring(date:time(start),1,5)">
<xsl:value-of select="concat('&#160;bis&#160;', substring(date:time(end),1,5))"/>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:attribute>
<!-- string(a) -->
<xsl:value-of select="title"/>
</a>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</td>
<xsl:if test="date:day-in-week($date) != 1"> <!-- Sunday? Break and return to output-week... -->
<xsl:call-template name="output-day">
<xsl:with-param name="date" select="date:add($date, 'P1D')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="calendar-title">
<xsl:variable name="d1" select="date:date()"/>
<xsl:variable name="d2" select="date:add(date:date(), 'P1M')"/>
<xsl:text>Kalender: </xsl:text>
<xsl:call-template name="get-monthstring">
<xsl:with-param name="date" select="$d1"/>
</xsl:call-template>
<xsl:if test="date:year($d1) != date:year($d2)">
<xsl:text> </xsl:text>
<xsl:value-of select="date:year($d1)"/>
</xsl:if>
<xsl:text> &amp; </xsl:text>
<xsl:call-template name="get-monthstring">
<xsl:with-param name="date" select="$d2"/>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:value-of select="date:year($d2)"/>
</xsl:template>
<xsl:template name="get-past-monday">
<xsl:param name="date"/>
<xsl:choose>
<xsl:when test="date:day-in-week($date) = 2">
<xsl:value-of select="$date"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="get-past-monday">
<xsl:with-param name="date" select="date:add($date, '-P1D')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
# Identity transformation for all elements
# not handled by the templates within this file.
# Taken from
# http://stackoverflow.com/questions/10454114/xslt-template-for-any-node-not-already-handled
-->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This code is distributed under the GPLv2 OR LATER -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times">
<xsl:template name="ddate">
<xsl:param name="date"/>
<xsl:choose>
<xsl:when test="date:month-in-year($date) = 2 and date:day-in-month($date) = 29">
<xsl:text>St. Tib's Day</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="yday">
<xsl:choose>
<xsl:when test="date:leap-year($date) and date:month-in-year($date) &gt; 2">
<xsl:value-of select="date:day-in-year($date) - 1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="date:day-in-year($date)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="season" select="floor(($yday - 1) div 73) + 1"/>
<xsl:variable name="mday" select="(($yday - 1) mod 73) + 1"/>
<xsl:variable name="wday" select="($yday - 1) mod 5"/>
<xsl:choose>
<xsl:when test="$wday = 0">Sweetmorn</xsl:when>
<xsl:when test="$wday = 1">Boomtime</xsl:when>
<xsl:when test="$wday = 2">Pungenday</xsl:when>
<xsl:when test="$wday = 3">Prickle-Prickle</xsl:when>
<xsl:when test="$wday = 4">Setting Orange</xsl:when>
<xsl:otherwise>???</xsl:otherwise>
</xsl:choose>
<xsl:text>, the </xsl:text>
<xsl:value-of select="$mday"/>
<xsl:choose>
<xsl:when test="$mday = 11">th</xsl:when>
<xsl:when test="$mday = 12">th</xsl:when>
<xsl:when test="$mday = 13">th</xsl:when>
<xsl:when test="$mday mod 10 = 1">st</xsl:when>
<xsl:when test="$mday mod 10 = 2">nd</xsl:when>
<xsl:when test="$mday mod 10 = 3">rd</xsl:when>
<xsl:otherwise>th</xsl:otherwise>
</xsl:choose>
<xsl:text> of </xsl:text>
<xsl:choose>
<xsl:when test="$season = 1">Chaos</xsl:when>
<xsl:when test="$season = 2">Discord</xsl:when>
<xsl:when test="$season = 3">Confusion</xsl:when>
<xsl:when test="$season = 4">Bureaucracy</xsl:when>
<xsl:when test="$season = 5">The Aftermath</xsl:when>
<xsl:otherwise>???</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<xsl:text>, </xsl:text>
<xsl:value-of select="date:year($date) + 1166"/> YOLD
</xsl:template>
<xsl:template name="ddate-holiday">
<xsl:param name="date"/>
<xsl:variable name="yday">
<xsl:choose>
<xsl:when test="date:leap-year($date) and date:month-in-year($date) &gt; 2">
<xsl:value-of select="date:day-in-year($date) - 1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="date:day-in-year($date)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mday" select="(($yday - 1) mod 73) + 1"/>
<xsl:variable name="season" select="floor(($yday - 1) div 73) + 1"/>
<xsl:choose>
<xsl:when test="date:month-in-year($date) = 2 and
date:day-in-month($date) = 29">
<xsl:text>St. Tib's Day</xsl:text>
</xsl:when>
<!-- APOSTLE HOLIDAYS -->
<xsl:when test="$mday = 5">
<xsl:choose>
<xsl:when test="$season = 1">Mungday</xsl:when>
<xsl:when test="$season = 2">Mojoday</xsl:when>
<xsl:when test="$season = 3">Syaday</xsl:when>
<xsl:when test="$season = 4">Zaraday</xsl:when>
<xsl:when test="$season = 5">Maladay</xsl:when>
</xsl:choose>
</xsl:when>
<!-- SEASON HOLIDAYS -->
<xsl:when test="$mday = 50">
<xsl:choose>
<xsl:when test="$season = 1">Chaoflux</xsl:when>
<xsl:when test="$season = 2">Discoflux</xsl:when>
<xsl:when test="$season = 3">Confuflux</xsl:when>
<xsl:when test="$season = 4">Bureflux</xsl:when>
<xsl:when test="$season = 5">Afflux</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- Test support code -->
<xsl:template match="dt:ddate-test" xmlns:dt="http://www.c3d2.de/ddate-test">
<xsl:call-template name="ddate">
<xsl:with-param name="date" select="."/>
</xsl:call-template>
<xsl:text> - </xsl:text>
<xsl:call-template name="ddate-holiday">
<xsl:with-param name="date" select="."/>
</xsl:call-template>
</xsl:template>
<xsl:template name="strip-time-from-date">
<xsl:param name="date"/>
<xsl:choose>
<xsl:when test="contains($date,'T')"><xsl:value-of select="substring-before($date,'T')"/></xsl:when>
<xsl:otherwise test="contains($date,'T')"><xsl:value-of select="$date"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -438,13 +438,4 @@
format-number(date:second-in-minute($date), '00'), ' GMT')"/>
</xsl:template>
<xsl:template name="strip-time-from-date">
<xsl:param name="date"/>
<xsl:choose>
<xsl:when test="contains($date,'T')"><xsl:value-of select="substring-before($date,'T')"/></xsl:when>
<xsl:otherwise test="contains($date,'T')"><xsl:value-of select="$date"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,331 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<xsl:template match="/item">
<page title="@title">
<xsl:apply-templates />
</page>
</xsl:template>
<xsl:template match="item/event">
<dl>
<xsl:apply-templates/>
</dl>
</xsl:template>
<xsl:template match="item/event/start">
<xsl:variable name="start" select="."/>
<xsl:variable name="end" select="../end"/>
<dt>Datum</dt>
<dd>
<abbr class="dtstart">
<xsl:attribute name="title">
<xsl:call-template name="date-to-hevent">
<xsl:with-param name="date" select="$start"/>
</xsl:call-template>
</xsl:attribute>
<xsl:call-template name="get-datestring">
<xsl:with-param name="date" select="$start"/>
</xsl:call-template>
</abbr>
<xsl:if test="$end">
bis
<abbr class="dtend">
<xsl:attribute name="title">
<xsl:call-template name="date-to-hevent">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:attribute>
<xsl:choose>
<!-- Ends on same day it starts? -->
<xsl:when test="date:date($start) = date:date($end)">
<xsl:call-template name="get-timestring">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:when>
<!-- Event spans days -->
<xsl:otherwise>
<xsl:call-template name="get-datestring">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</abbr>
</xsl:if>
</dd>
</xsl:template>
<xsl:template match="item/event/end">
<!-- Output already for item/event/start above -->
</xsl:template>
<xsl:template match="item/event/location">
<dt>Ort</dt>
<dd class="location"><xsl:apply-templates/></dd>
</xsl:template>
<!--
<xsl:template match="item/image[1]">
<xsl:variable name="path">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="concat($baseurl, 'images/news/', .)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<img
src="{$path}"
title="{@title}"
alt="{@title}"
class="{@class}"/>
</xsl:template>
<xsl:template match="item/image">
<xsl:param name="itemposition"/>
<img>
<xsl:attribute name="src">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:choose>
<xsl:when test="contains(., '://')">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($baseurl, 'images/news/', .)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="@title"/></xsl:attribute>
News-Items haben ihre Bilder abwechselnd rechts und links...
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="$itemposition mod 2 = 1">
<xsl:text>left</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>right</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</img>
</xsl:template>
-->
<!-- Resources/alternatives in HTML -->
<xsl:template match="resource">
<xsl:choose>
<xsl:when test="not(starts-with(@type, 'video/')) or count(resource[not(starts-with(@type, 'video/'))]) &gt; 0">
<!-- Is not only video/* -->
<ul>
<xsl:call-template name="resource-item"/>
<xsl:apply-templates mode="resource"/>
</ul>
</xsl:when>
<xsl:otherwise>
<!-- Video only -->
<xsl:call-template name="video-resource"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="resource/alternative" mode="resource">
<xsl:call-template name="resource-item">
<xsl:with-param name="title">
<xsl:choose>
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="../@title"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="resource-item">
<xsl:param name="title" select="@title"/>
<!-- @class = "resource" | "alternative" -->
<li class="{name(.)}">
<!-- HTML5 dataset hints for play-resources.js poster -->
<xsl:if test="@poster">
<xsl:attribute name="data-poster">
<xsl:value-of select="@poster"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@preview">
<xsl:attribute name="data-preview">
<xsl:value-of select="@preview"/>
</xsl:attribute>
</xsl:if>
<!-- MIME type hinting works even in the browser -->
<a href="{@url}" type="{@type}" class="mime" rel="enclosure">
<xsl:choose>
<xsl:when test="string-length(string($title))"><xsl:value-of select="$title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="@url"/></xsl:otherwise>
</xsl:choose>
</a>
(<xsl:call-template name="mime-for-human">
<xsl:with-param name="mime" select="@type"/>
</xsl:call-template>, <xsl:call-template name="format-filesize">
<xsl:with-param name="value" select="@size"/>
</xsl:call-template>)
</li>
</xsl:template>
<xsl:template name="video-resource">
<section class="video-resource">
<h4>
<xsl:choose>
<xsl:when test="@details-link">
<a href="{@details-link}">
<xsl:value-of select="@title"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@title"/>
</xsl:otherwise>
</xsl:choose>
</h4>
<ul>
<xsl:call-template name="video-resource-item"/>
<xsl:apply-templates mode="video-resource"/>
<xsl:if test="@feedback-link">
<li class="feedback"><a href="{@feedback-link}">Feedback</a></li>
</xsl:if>
</ul>
</section>
</xsl:template>
<xsl:template match="resource/alternative" mode="video-resource">
<xsl:call-template name="video-resource-item">
<xsl:with-param name="title">
<xsl:choose>
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="../@title"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="video-resource-item">
<li class="{name(.)}">
<!-- HTML5 dataset hints for play-resources.js poster -->
<xsl:if test="@poster">
<xsl:attribute name="data-poster">
<xsl:value-of select="@poster"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@preview">
<xsl:attribute name="data-preview">
<xsl:value-of select="@preview"/>
</xsl:attribute>
</xsl:if>
<!-- MIME type hinting works even in the browser -->
<a href="{@url}" type="{@type}" class="mime" rel="enclosure">
<xsl:call-template name="mime-for-human-short">
<xsl:with-param name="mime" select="@type"/>
</xsl:call-template>
</a>
<span class="size">
<xsl:call-template name="format-filesize">
<xsl:with-param name="value" select="@size"/>
</xsl:call-template>
</span>
</li>
</xsl:template>
<xsl:template name="format-filesize">
<xsl:param name="value"/>
<xsl:choose>
<xsl:when test="$value &gt; 1024 * 1024 * 1024">
<xsl:value-of select="format-number($value div (1024 * 1024 * 1024), '0.0')"/>
<xsl:text> GB</xsl:text>
</xsl:when>
<xsl:when test="$value &gt; 1024 * 1024">
<xsl:value-of select="format-number($value div (1024 * 1024), '0.0')"/>
<xsl:text> MB</xsl:text>
</xsl:when>
<xsl:when test="$value &gt; 1024">
<xsl:value-of select="format-number($value div (1024), '0.0')"/>
<xsl:text> KB</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value"/>
<xsl:text> Bytes</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="mime-for-human">
<xsl:param name="mime"/>
<xsl:choose>
<xsl:when test="$mime = 'application/ogg'">Ogg Vorbis</xsl:when>
<xsl:when test="$mime = 'audio/ogg'">Ogg Vorbis</xsl:when>
<xsl:when test="$mime = 'audio/mpeg'">MPEG-Audio</xsl:when>
<xsl:when test="$mime = 'application/octet-stream'">Binärdatei</xsl:when>
<xsl:when test="$mime = 'application/xhtml+xml'">XHTML-Dokument</xsl:when>
<xsl:when test="$mime = 'text/html'">HTML-Dokument</xsl:when>
<xsl:when test="$mime = 'text/plain'">Text-Dokument</xsl:when>
<xsl:when test="$mime = 'application/pdf'">Portable Document Format</xsl:when>
<xsl:when test="$mime = 'image/svg+xml'">Scalable Vector Graphics</xsl:when>
<xsl:when test="$mime = 'image/gif'">GIF-Bild</xsl:when>
<xsl:when test="$mime = 'image/jpeg'">JPEG-Bild</xsl:when>
<xsl:when test="$mime = 'image/png'">PNG-Bild</xsl:when>
<xsl:when test="$mime = 'video/mpeg'">MPEG-Video</xsl:when>
<xsl:when test="$mime = 'video/mp4'">MP4-Video</xsl:when>
<xsl:when test="$mime = 'video/quicktime'">QuickTime-Video</xsl:when>
<xsl:when test="$mime = 'video/x-ms-wmv'">Windows Media-Video</xsl:when>
<xsl:when test="$mime = 'video/x-msvideo'">Video for Windows</xsl:when>
<xsl:when test="$mime = 'video/avi'">Audio Video Interleave</xsl:when>
<xsl:when test="$mime = 'video/ogg'">Ogg Media Video</xsl:when>
<xsl:when test="$mime = 'video/x-matroska'">Matroska Video</xsl:when>
<xsl:when test="$mime = 'video/x-m4v'">iTunes Video File</xsl:when>
<xsl:when test="$mime = 'video/webm'">WebM Video</xsl:when>
<xsl:when test="$mime = 'video/x-flv'">Flash Video</xsl:when>
<xsl:when test="$mime = 'application/x-gtar'">Komprimierter Tarball</xsl:when>
<xsl:when test="$mime = 'application/x-tar'">Tarball</xsl:when>
<xsl:when test="$mime = 'application/x-bittorrent'">BitTorrent-Metainformationen</xsl:when>
<xsl:when test="$mime = 'application/zip'">ZIP-Archiv</xsl:when>
<xsl:when test="$mime = 'multipart/x-zip'">ZIP-Archiv</xsl:when>
<xsl:when test="$mime = 'audio/opus'">Opus</xsl:when>
<xsl:otherwise>Datei</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="mime-for-human-short">
<xsl:param name="mime"/>
<xsl:choose>
<xsl:when test="@type='audio/mpeg'">MP3</xsl:when>
<xsl:when test="@type='video/mp4'">MP4</xsl:when>
<xsl:when test="@type='video/webm'">WebM</xsl:when>
<xsl:when test="@type='video/ogg'">Ogg</xsl:when>
<xsl:when test="@type='video/avi'">AVI</xsl:when>
<xsl:when test="@type='video/x-flv'">FLV</xsl:when>
<xsl:when test="@type='application/x-bittorrent'">BitTorrent</xsl:when>
<xsl:otherwise><xsl:value-of select="@type"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -10,9 +10,6 @@
encoding="utf-8"
indent="yes"/>
<xsl:include href="include/date.xsl" />
<xsl:template match="news">
<page title="@title" id="@id">
<xsl:attribute name="title">

View File

@ -1,121 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<!-- Support für <event/> bzw. Microformats -->
<xsl:include href="date.xsl" />
<xsl:template match="item/event">
<dl>
<xsl:apply-templates/>
</dl>
</xsl:template>
<xsl:template match="item/event/start">
<xsl:variable name="start" select="."/>
<xsl:variable name="end" select="../end"/>
<dt>Datum</dt>
<dd>
<abbr class="dtstart">
<xsl:attribute name="title">
<xsl:call-template name="date-to-hevent">
<xsl:with-param name="date" select="$start"/>
</xsl:call-template>
</xsl:attribute>
<xsl:call-template name="get-datestring">
<xsl:with-param name="date" select="$start"/>
</xsl:call-template>
</abbr>
<xsl:if test="$end">
bis
<abbr class="dtend">
<xsl:attribute name="title">
<xsl:call-template name="date-to-hevent">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:attribute>
<xsl:choose>
<!-- Ends on same day it starts? -->
<xsl:when test="date:date($start) = date:date($end)">
<xsl:call-template name="get-timestring">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:when>
<!-- Event spans days -->
<xsl:otherwise>
<xsl:call-template name="get-datestring">
<xsl:with-param name="date" select="$end"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</abbr>
</xsl:if>
</dd>
</xsl:template>
<xsl:template match="item/event/end">
<!-- Output already for item/event/start above -->
</xsl:template>
<xsl:template match="item/event/location">
<dt>Ort</dt>
<dd class="location"><xsl:apply-templates/></dd>
</xsl:template>
<xsl:template match="item/image[1]">
<xsl:variable name="path">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="concat($baseurl, 'images/news/', .)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<img
src="{$path}"
title="{@title}"
alt="{@title}"
class="{@class}"/>
</xsl:template>
<xsl:template match="item/image">
<xsl:param name="itemposition"/>
<img>
<xsl:attribute name="src">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:choose>
<xsl:when test="contains(., '://')">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($baseurl, 'images/news/', .)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="@title"/></xsl:attribute>
<!-- News-Items haben ihre Bilder abwechselnd rechts und links... -->
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="$itemposition mod 2 = 1">
<xsl:text>left</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>right</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</img>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<xsl:include href="include/date.xsl" />
<xsl:include href="include/item.xsl" />
<xsl:include href="include/news.xsl" />
<xsl:output method="xml"
version="1.0"
encoding="utf-8"
indent="yes"/>
<!--
# Identity transformation for all elements
# not handled by the templates within this file.
# Taken from
# http://stackoverflow.com/questions/10454114/xslt-template-for-any-node-not-already-handled
-->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom"
exclude-result-prefixes="xsl date">
<xsl:output method="xml"
version="1.0"
encoding="utf-8"
indent="yes"/>
<!--
# Starting point
# ==============
#
# Matches root and calls the
# main-Template defined within the
# application-specific template.
-->
<xsl:template match="news">
<xsl:element name="rss">
<xsl:attribute name="version">2.0</xsl:attribute>
<!--xsl:attribute name="xml:lang">de</xsl:attribute-->
<!-- include domain-specific channel description -->
<xsl:call-template name="main" />
</xsl:element>
</xsl:template>
<!--
# Interface templates
# ===================
#
# To be used by the application-specific
# xsl-template.
-->
<xsl:template name="rss_entries">
<xsl:param name="prefix" />
<!-- TODO: Insert "now": <pubDate><xsl:value-of select="news/item/@date"/></pubDate> -->
<xsl:for-each select="newsfile">
<xsl:sort select="date:seconds(document(.)/item/@date)" data-type="number" order="descending" />
<xsl:variable name="newsfile" select="."/>
<xsl:if test="(position() &lt;= $maxitems) and
starts-with(substring-after(substring-after($newsfile, '/'), '/'), $prefix)">
<xsl:apply-templates select="document(.)/item">
<xsl:with-param name="newsfile" select="$newsfile"/>
</xsl:apply-templates>
</xsl:if>
</xsl:for-each>
</xsl:template>
<!--
# Additional templates
# ====================
#
-->
<!--
# Template to transform an item into an rss-entry.
-->
<xsl:template match="item">
<xsl:param name="newsfile"/>
<item>
<xsl:variable name="href">
<xsl:value-of select="$baseurl"/>
<xsl:value-of select="substring-before(substring-after($newsfile, 'content/'), '.xml')"/>
<xsl:text>.html</xsl:text>
</xsl:variable>
<title><xsl:value-of select="@title"/></title>
<description>
<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<div xmlns="http://www.w3.org/1999/xhtml">
<xsl:apply-templates select="document($newsfile)/item/*"/>
</div>
<xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</description>
<link><xsl:value-of select="$href"/></link>
<!--
TODO:
Jemand mit iTunes (erhältlich für OSX und Windows)
muss mal die itunes-extensions einbauen:
http://www.apple.com/itunes/podcasts/techspecs.html
-->
<xsl:for-each select=".//*[name() = 'resource' or name() = 'alternative']">
<xsl:variable name="resource_href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@url"/>
</xsl:call-template>
</xsl:variable>
<enclosure url="{$resource_href}"
length="{@size}"
type="{@type}" />
</xsl:for-each>
<guid isPermaLink="true"><xsl:value-of select="$href"/></guid>
<pubDate>
<xsl:call-template name="date-to-rfc822">
<xsl:with-param name="date" select="@date"/>
</xsl:call-template>
</pubDate>
<content:encoded>
<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<div xmlns="http://www.w3.org/1999/xhtml">
<xsl:apply-templates select="document($newsfile)/item/*"/>
</div>
<xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</content:encoded>
<xsl:variable name="flattr_link">
<xsl:call-template name="make-flattr-link">
<xsl:with-param name="newsfile" select="$newsfile"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($flattr_link) &gt; 0">
<atom:link rel="payment" href="{$flattr_link}" type="text/html"/>
</xsl:if>
<xsl:copy-of select="resource/sc:chapters"
xmlns:sc="http://podlove.de/simple-chapters"/>
</item>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,485 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
exclude-result-prefixes="xsl rss rdf date str">
<!-- TODO: Move non-HTML-entities into separate files. -->
<xsl:template match="pre">
<pre><xsl:apply-templates/></pre>
</xsl:template>
<xsl:template match="p">
<xsl:if test="@title">
<h3>
<xsl:value-of select="@title"/>
</h3>
</xsl:if>
<p class="{@class}">
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="dl">
<dl class="{@class}">
<xsl:apply-templates/>
</dl>
</xsl:template>
<xsl:template match="dh">
<dt class="main"><xsl:apply-templates/></dt>
</xsl:template>
<xsl:template match="dt">
<dt><xsl:apply-templates/></dt>
</xsl:template>
<xsl:template match="dd">
<dd><xsl:apply-templates/></dd>
</xsl:template>
<xsl:template match="ul">
<ul><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="ol">
<ol><xsl:apply-templates/></ol>
</xsl:template>
<xsl:template match="li">
<li><xsl:apply-templates/></li>
</xsl:template>
<!-- Bilder in News-Einträgen haben Pfad immer relativ zu /images/news/ -->
<xsl:template match="image">
<xsl:variable name="path">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:choose>
<!-- use it like this: <image thumb="no">http://upload.wikimedia.org/commons/h/ha/picture.img</image> -->
<xsl:when test="not(@thumb='no') and contains(string(.), '://') and contains(string(.), 'wikimedia.org')">
<xsl:variable name="filename">
<xsl:value-of select="string(str:tokenize(string(.),'/')[last()])"/>
</xsl:variable>
<xsl:variable name="hash">
<xsl:value-of select="concat(str:tokenize(string(.),'/')[position()=last()-2],'/',str:tokenize(string(.),'/')[position()=last()-1],'/')"/>
</xsl:variable>
<xsl:variable name="validfilename">
<xsl:choose>
<xsl:when test="contains($filename, '.svg') and string-length(substring-after($filename, '.svg'))=0">
<xsl:value-of select="concat($filename, '.png')"/>
</xsl:when>
<xsl:when test="contains(., '://')">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat(substring-before(string(.),'commons/'),'commons/thumb/',$hash,$filename,'/600px-',$validfilename)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($baseurl, .)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<img
src="{$path}"
title="{@title}"
alt="{@title}"
class="{@class}"/>
</xsl:template>
<xsl:template match="link">
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@href"/>
</xsl:call-template>
</xsl:variable>
<a href="{$href}">
<xsl:if test="@class">
<xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template name="make-href">
<xsl:param name="href"/>
<xsl:choose>
<xsl:when test="$href and not(contains($href, ':'))">
<xsl:value-of select="concat($baseurl,$href)"/>
</xsl:when>
<xsl:when test="$href">
<xsl:value-of select="$href"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="em">
<em>
<xsl:apply-templates/>
</em>
</xsl:template>
<xsl:template match="strong">
<strong>
<xsl:apply-templates/>
</strong>
</xsl:template>
<xsl:template match="xhtml:*"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:copy-of select="."/>
</xsl:template>
<!-- Chaosupdates in tile -->
<xsl:template name="chaosupdates">
<xsl:param name="limit" select="5"/>
<h3>
<a href="{document('../chaosupdates.xml')/rdf:RDF/rss:channel/rss:link}">
<xsl:value-of select="document('../chaosupdates.xml')/rdf:RDF/rss:channel/rss:title"/>
</a>
</h3>
<ul>
<xsl:for-each select="document('../chaosupdates.xml')/rdf:RDF/rss:item[position() &lt;= $limit]">
<li>
<a href="{rss:link}">
<xsl:value-of select="rss:title"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<!-- Calendar in tile -->
<xsl:template name="calendar-events">
<xsl:param name="limit" select="5"/>
<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>
<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>
<!-- Resources/alternatives in HTML -->
<xsl:template match="resource">
<xsl:choose>
<xsl:when test="not(starts-with(@type, 'video/')) or count(resource[not(starts-with(@type, 'video/'))]) &gt; 0">
<!-- Is not only video/* -->
<ul>
<xsl:call-template name="resource-item"/>
<xsl:apply-templates mode="resource"/>
</ul>
</xsl:when>
<xsl:otherwise>
<!-- Video only -->
<xsl:call-template name="video-resource"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="resource/alternative" mode="resource">
<xsl:call-template name="resource-item">
<xsl:with-param name="title">
<xsl:choose>
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="../@title"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="resource-item">
<xsl:param name="title" select="@title"/>
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@url"/>
</xsl:call-template>
</xsl:variable>
<!-- @class = "resource" | "alternative" -->
<li class="{name(.)}">
<!-- HTML5 dataset hints for play-resources.js poster -->
<xsl:if test="@poster">
<xsl:attribute name="data-poster">
<xsl:value-of select="@poster"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@preview">
<xsl:attribute name="data-preview">
<xsl:value-of select="@preview"/>
</xsl:attribute>
</xsl:if>
<!-- MIME type hinting works even in the browser -->
<a href="{$href}" type="{@type}" class="mime" rel="enclosure">
<xsl:choose>
<xsl:when test="string-length(string($title))"><xsl:value-of select="$title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$href"/></xsl:otherwise>
</xsl:choose>
</a>
(<xsl:call-template name="mime-for-human">
<xsl:with-param name="mime" select="@type"/>
</xsl:call-template>, <xsl:call-template name="format-filesize">
<xsl:with-param name="value" select="@size"/>
</xsl:call-template>)
<xsl:if test="$baseurl = '' or $baseurl = '../'">
<!-- Include chapters only in XHTML for JS player. ATOM feeds
copy chapters outside <content type="xhtml"/>
-->
<xsl:copy-of select="sc:chapters"
xmlns:sc="http://podlove.de/simple-chapters"/>
</xsl:if>
</li>
</xsl:template>
<xsl:template name="video-resource">
<section class="video-resource">
<h4>
<xsl:choose>
<xsl:when test="@details-link">
<a href="{@details-link}">
<xsl:value-of select="@title"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@title"/>
</xsl:otherwise>
</xsl:choose>
</h4>
<ul>
<xsl:call-template name="video-resource-item"/>
<xsl:apply-templates mode="video-resource"/>
<xsl:if test="@feedback-link">
<li class="feedback"><a href="{@feedback-link}">Feedback</a></li>
</xsl:if>
</ul>
</section>
</xsl:template>
<xsl:template match="resource/alternative" mode="video-resource">
<xsl:call-template name="video-resource-item">
<xsl:with-param name="title">
<xsl:choose>
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
<xsl:otherwise><xsl:value-of select="../@title"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="video-resource-item">
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@url"/>
</xsl:call-template>
</xsl:variable>
<li class="{name(.)}">
<!-- HTML5 dataset hints for play-resources.js poster -->
<xsl:if test="@poster">
<xsl:attribute name="data-poster">
<xsl:value-of select="@poster"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@preview">
<xsl:attribute name="data-preview">
<xsl:value-of select="@preview"/>
</xsl:attribute>
</xsl:if>
<!-- MIME type hinting works even in the browser -->
<a href="{$href}" type="{@type}" class="mime" rel="enclosure">
<xsl:call-template name="mime-for-human-short">
<xsl:with-param name="mime" select="@type"/>
</xsl:call-template>
</a>
<span class="size">
<xsl:call-template name="format-filesize">
<xsl:with-param name="value" select="@size"/>
</xsl:call-template>
</span>
</li>
</xsl:template>
<!-- Helpers -->
<xsl:template name="format-filesize">
<xsl:param name="value"/>
<xsl:choose>
<xsl:when test="$value &gt; 1024 * 1024 * 1024">
<xsl:value-of select="format-number($value div (1024 * 1024 * 1024), '0.0')"/>
<xsl:text> GB</xsl:text>
</xsl:when>
<xsl:when test="$value &gt; 1024 * 1024">
<xsl:value-of select="format-number($value div (1024 * 1024), '0.0')"/>
<xsl:text> MB</xsl:text>
</xsl:when>
<xsl:when test="$value &gt; 1024">
<xsl:value-of select="format-number($value div (1024), '0.0')"/>
<xsl:text> KB</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value"/>
<xsl:text> Bytes</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="mime-for-human">
<xsl:param name="mime"/>
<xsl:choose>
<xsl:when test="$mime = 'application/ogg'">Ogg Vorbis</xsl:when>
<xsl:when test="$mime = 'audio/ogg'">Ogg Vorbis</xsl:when>
<xsl:when test="$mime = 'audio/mpeg'">MPEG-Audio</xsl:when>
<xsl:when test="$mime = 'application/octet-stream'">Binärdatei</xsl:when>
<xsl:when test="$mime = 'application/xhtml+xml'">XHTML-Dokument</xsl:when>
<xsl:when test="$mime = 'text/html'">HTML-Dokument</xsl:when>
<xsl:when test="$mime = 'text/plain'">Text-Dokument</xsl:when>
<xsl:when test="$mime = 'application/pdf'">Portable Document Format</xsl:when>
<xsl:when test="$mime = 'image/svg+xml'">Scalable Vector Graphics</xsl:when>
<xsl:when test="$mime = 'image/gif'">GIF-Bild</xsl:when>
<xsl:when test="$mime = 'image/jpeg'">JPEG-Bild</xsl:when>
<xsl:when test="$mime = 'image/png'">PNG-Bild</xsl:when>
<xsl:when test="$mime = 'video/mpeg'">MPEG-Video</xsl:when>
<xsl:when test="$mime = 'video/mp4'">MP4-Video</xsl:when>
<xsl:when test="$mime = 'video/quicktime'">QuickTime-Video</xsl:when>
<xsl:when test="$mime = 'video/x-ms-wmv'">Windows Media-Video</xsl:when>
<xsl:when test="$mime = 'video/x-msvideo'">Video for Windows</xsl:when>
<xsl:when test="$mime = 'video/avi'">Audio Video Interleave</xsl:when>
<xsl:when test="$mime = 'video/ogg'">Ogg Media Video</xsl:when>
<xsl:when test="$mime = 'video/x-matroska'">Matroska Video</xsl:when>
<xsl:when test="$mime = 'video/x-m4v'">iTunes Video File</xsl:when>
<xsl:when test="$mime = 'video/webm'">WebM Video</xsl:when>
<xsl:when test="$mime = 'video/x-flv'">Flash Video</xsl:when>
<xsl:when test="$mime = 'application/x-gtar'">Komprimierter Tarball</xsl:when>
<xsl:when test="$mime = 'application/x-tar'">Tarball</xsl:when>
<xsl:when test="$mime = 'application/x-bittorrent'">BitTorrent-Metainformationen</xsl:when>
<xsl:when test="$mime = 'application/zip'">ZIP-Archiv</xsl:when>
<xsl:when test="$mime = 'multipart/x-zip'">ZIP-Archiv</xsl:when>
<xsl:when test="$mime = 'audio/opus'">Opus</xsl:when>
<xsl:otherwise>Datei</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="mime-for-human-short">
<xsl:param name="mime"/>
<xsl:choose>
<xsl:when test="@type='audio/mpeg'">MP3</xsl:when>
<xsl:when test="@type='video/mp4'">MP4</xsl:when>
<xsl:when test="@type='video/webm'">WebM</xsl:when>
<xsl:when test="@type='video/ogg'">Ogg</xsl:when>
<xsl:when test="@type='video/avi'">AVI</xsl:when>
<xsl:when test="@type='video/x-flv'">FLV</xsl:when>
<xsl:when test="@type='application/x-bittorrent'">BitTorrent</xsl:when>
<xsl:otherwise><xsl:value-of select="@type"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="normalize-path">
<xsl:param name="path"/>
<xsl:choose>
<xsl:when test="contains($path, '/')">
<xsl:variable name="dir1" select="substring-before($path, '/')"/>
<xsl:variable name="dir2" select="substring-after($path, '/')"/>
<xsl:choose>
<xsl:when test="starts-with($dir2, '../')">
<!-- recurse with xxx/../ removed -->
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="substring-after($dir2, '../')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!-- spit out and recurse with tail -->
<xsl:value-of select="$dir1"/><xsl:text>/</xsl:text><xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="$dir2"/>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- just a filename with no / -->
<xsl:value-of select="$path"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="make-flattr-link">
<xsl:param name="newsfile"/>
<xsl:if test="starts-with($newsfile, 'content/news/pentaradio24-') or
starts-with($newsfile, 'content/news/pentacast-') or
starts-with($newsfile, 'content/news/pentamusic-')">
<xsl:text>https://flattr.com/submit/auto?user_id=coloradio&amp;url=</xsl:text>
<xsl:value-of select="str:encode-uri(concat($baseurl, substring-before(substring-after($newsfile, 'content/'), '.xml'), '.html'), true())"/>
<xsl:text>&amp;title=</xsl:text>
<xsl:value-of select="str:encode-uri(document($newsfile)/item/@title, true())"/>
<xsl:text>&amp;description=</xsl:text>
<xsl:value-of select="str:encode-uri(document($newsfile)//p[1], true())"/>
<xsl:text>&amp;language=de&amp;tags=audio,c3d2,podcast&amp;category=audio</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<!-- TODO: Check if this template can be safely removed.
<xsl:template name="make-href">
<xsl:param name="href"/>
<xsl:choose>
<xsl:when test="$href">
<xsl:value-of select="$href"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
-->
<xsl:template name="normalize-path">
<xsl:param name="path"/>
<xsl:choose>
<xsl:when test="contains($path, '/')">
<xsl:variable name="dir1" select="substring-before($path, '/')"/>
<xsl:variable name="dir2" select="substring-after($path, '/')"/>
<xsl:choose>
<xsl:when test="starts-with($dir2, '../')">
<!-- recurse with xxx/../ removed -->
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="substring-after($dir2, '../')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!-- spit out and recurse with tail -->
<xsl:value-of select="$dir1"/><xsl:text>/</xsl:text><xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:value-of select="$dir2"/>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- just a filename with no / -->
<xsl:value-of select="$path"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="make-flattr-link">
<xsl:param name="newsfile"/>
<xsl:if test="starts-with($newsfile, 'content/news/pentaradio24-') or
starts-with($newsfile, 'content/news/pentacast-') or
starts-with($newsfile, 'content/news/pentamusic-')">
<xsl:text>https://flattr.com/submit/auto?user_id=coloradio&amp;url=</xsl:text>
<xsl:value-of select="str:encode-uri(concat($baseurl, substring-before(substring-after($newsfile, 'content/'), '.xml'), '.html'), true())"/>
<xsl:text>&amp;title=</xsl:text>
<xsl:value-of select="str:encode-uri(document($newsfile)/item/@title, true())"/>
<xsl:text>&amp;description=</xsl:text>
<xsl:value-of select="str:encode-uri(document($newsfile)//p[1], true())"/>
<xsl:text>&amp;language=de&amp;tags=audio,c3d2,podcast&amp;category=audio</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
exclude-result-prefixes="xsl rss rdf date str">
<!-- TODO: Move non-HTML-entities into separate files. -->
<xsl:template match="pre">
<pre><xsl:apply-templates/></pre>
</xsl:template>
<xsl:template match="p">
<xsl:if test="@title">
<h3>
<xsl:value-of select="@title"/>
</h3>
</xsl:if>
<p class="{@class}">
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="dl">
<dl class="{@class}">
<xsl:apply-templates/>
</dl>
</xsl:template>
<xsl:template match="dh">
<dt class="main"><xsl:apply-templates/></dt>
</xsl:template>
<xsl:template match="dt">
<dt><xsl:apply-templates/></dt>
</xsl:template>
<xsl:template match="dd">
<dd><xsl:apply-templates/></dd>
</xsl:template>
<xsl:template match="ul">
<ul><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="ol">
<ol><xsl:apply-templates/></ol>
</xsl:template>
<xsl:template match="li">
<li><xsl:apply-templates/></li>
</xsl:template>
<xsl:template match="em">
<em>
<xsl:apply-templates/>
</em>
</xsl:template>
<xsl:template match="strong">
<strong>
<xsl:apply-templates/>
</strong>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
@ -8,43 +7,68 @@
xmlns:str="http://exslt.org/strings"
exclude-result-prefixes="xsl rss rdf date str">
<!--
# Templates used for generation of navigation elements.
#
# TODO: Remove duplicate code within navitems- and subnavigation-template.
-->
<xsl:template name="navitem">
<xsl:param name="file"/>
<xsl:param name="baseurl"/>
<xsl:variable name="xml_file" select="document(concat($file, '.xml'))" />
<a href="{$baseurl}{$file}.html">
<xsl:choose>
<xsl:when test="$xml_file/page/@title">
<xsl:attribute name="title">
<xsl:value-of select="$xml_file/page/@title"/>
</xsl:attribute>
<xsl:value-of select="$xml_file/page/@title"/>
</xsl:when>
<xsl:otherwise>
MISSING TITLE
</xsl:otherwise>
</xsl:choose>
</a>
<xsl:param name="file"/>
<xsl:variable name="xml_file" select="document(concat($file, '.xml'))" />
<xsl:variable name="title">
<!-- Use nav_title-attribute if possible or fallback to
page title -->
<xsl:choose>
<xsl:when test="$xml_file/page/@nav_title">
<xsl:value-of select="$xml_file/page/@nav_title" />
</xsl:when>
<xsl:when test="$xml_file/page/@title">
<xsl:value-of select="$xml_file/page/@title" />
</xsl:when>
<xsl:otherwise>MISSING TITLE</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{$file}.html" title="{$title}">
<xsl:value-of select="$title" />
</a>
</xsl:template>
<xsl:template name="navitems">
<xsl:param name="active" />
<xsl:variable name="active" select="string(/page/@id)"/>
<nav id="navigation">
<ul>
<xsl:for-each select="document('navigation.xml')/navigation/file">
<li>
<!-- Check if this page is the active one -->
<xsl:if test=". = $active">
<xsl:attribute name="class">
active
</xsl:attribute>
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:call-template name="navitem">
<xsl:with-param name="file" select="."/>
<xsl:with-param name="baseurl" select="$baseurl"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</nav>
</xsl:template>
<xsl:template match="/page/subnavigation">
<xsl:variable name="active" select="string(/page/@id)"/>
<nav id="subnavigation">
<ul>
<xsl:for-each select="file">
<li>
<!-- Check if this page is the active one -->
<xsl:if test=". = $active">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:call-template name="navitem">
<xsl:with-param name="file" select="."/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</nav>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
exclude-result-prefixes="xsl rss rdf date str">
<!-- Chaosupdates in tile -->
<xsl:template name="chaosupdates">
<xsl:param name="limit" select="5"/>
<h3>
<a href="{document('../chaosupdates.xml')/rdf:RDF/rss:channel/rss:link}">
<xsl:value-of select="document('../chaosupdates.xml')/rdf:RDF/rss:channel/rss:title"/>
</a>
</h3>
<ul>
<xsl:for-each select="document('../chaosupdates.xml')/rdf:RDF/rss:item[position() &lt;= $limit]">
<li>
<a href="{rss:link}">
<xsl:value-of select="rss:title"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<!-- Calendar in tile -->
<xsl:template name="calendar-events">
<xsl:param name="limit" select="5"/>
<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>
<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>
</xsl:stylesheet>

View File

@ -5,11 +5,8 @@
xmlns:crypto="http://exslt.org/crypto"
exclude-result-prefixes="xsl date crypto">
<xsl:param name="common_title_prefix" />
<xsl:param name="baseurl" />
<xsl:include href="common.xsl" />
<xsl:include href="include/entities.xsl" />
<xsl:include href="include/html_entities.xsl" />
<xsl:include href="include/helpers.xsl" />
<xsl:include href="include/navigation.xsl" />
<xsl:output method="xml"
@ -17,144 +14,109 @@
encoding="utf-8"
indent="yes"/>
<!--
### PAGE TEMPLATE ###
<!--
# Starting point
# ==============
#
# Matches root and calls the
# main-Template defined within the
# application-specific template.
-->
Dependencies (used templates and variables not specified in this file):
Templates:
- navitems (consider: get the current active link via querying the page title or via param)
- header (may be renamed to common_html_head)
- footer (common_page_footer)
<xsl:template match="/page">
<xsl:call-template name="main" />
</xsl:template>
Variables:
- $baseurl
- $common_title_prefix
- $common_path
-->
<xsl:template match="/page">
<!-- TODO: Include proper DTD -->
<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>
<!--
# Interface templates
# ===================
#
# To be used by the application-specific
# xsl-template.
-->
<html lang="de" xml:lang="de">
<xsl:template name="page_title">
<xsl:value-of select="/page/@title" />
</xsl:template>
<!-- ## HTML HEAD ## -->
<head>
<!--
# Include the template containing
# common header data like meta tags,
# links and javascript-tags
-->
<xsl:call-template name="common_html_head" />
<xsl:template name="navigation">
<xsl:call-template name="navitems">
<xsl:with-param name="active" select="/page/@nav_id" />
</xsl:call-template>
</xsl:template>
<!--
# Add site-specific
# includes
-->
<xsl:apply-templates select="head" />
<xsl:template name="page_body">
<xsl:apply-templates match="/page/*" />
</xsl:template>
<!--
# Generate page title depending on
# whether a special subpage title is set or not
-->
<title>
<xsl:value-of select="$common_title_prefix" />
<xsl:if test="@title != ''">
<xsl:text> - </xsl:text>
<xsl:value-of select="@title" />
</xsl:if>
</title>
</head>
<!-- ## HTML BODY ## -->
<body>
<div id="page">
<!-- # PAGE HEAD # -->
<div id="head">
<!-- TODO: Include Logo-Artwork -->
<div id="title_logo">
<img src="{$baseurl}images/c3d2_title.png" alt="C3D2" title="C3D2" />
</div>
<nav id="navigation">
<xsl:call-template name="navitems">
<xsl:with-param name="active" select="@id" />
</xsl:call-template>
</nav>
</div>
<xsl:template name="head_include">
<!-- TBD -->
</xsl:template>
<section id="content">
<!--
# Additional templates
# ====================
#
-->
<!-- TODO: Check if an explicit title can be made obligatory. -->
<xsl:if test="@title != ''">
<h2>
<xsl:value-of select="@title" />
</h2>
</xsl:if>
<!-- Bilder in News-Einträgen haben Pfad immer relativ zu /images/news/ -->
<xsl:template match="image">
<xsl:variable name="path">
<xsl:call-template name="normalize-path">
<xsl:with-param name="path">
<xsl:choose>
<!-- use it like this: <image thumb="no">http://upload.wikimedia.org/commons/h/ha/picture.img</image> -->
<xsl:when test="not(@thumb='no') and contains(string(.), '://') and contains(string(.), 'wikimedia.org')">
<xsl:variable name="filename">
<xsl:value-of select="string(str:tokenize(string(.),'/')[last()])"/>
</xsl:variable>
<xsl:variable name="hash">
<xsl:value-of select="concat(str:tokenize(string(.),'/')[position()=last()-2],'/',str:tokenize(string(.),'/')[position()=last()-1],'/')"/>
</xsl:variable>
<xsl:variable name="validfilename">
<xsl:choose>
<xsl:when test="contains($filename, '.svg') and string-length(substring-after($filename, '.svg'))=0">
<xsl:value-of select="concat($filename, '.png')"/>
</xsl:when>
<xsl:when test="contains(., '://')">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat(substring-before(string(.),'commons/'),'commons/thumb/',$hash,$filename,'/600px-',$validfilename)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<!-- # PAGE BODY # -->
<xsl:apply-templates select="*" />
</section>
<img
src="{$path}"
title="{@title}"
alt="{@title}"
class="{@class}"/>
</xsl:template>
<!-- # PAGE FOOTER # -->
<footer id="footer">
<!-- ### Footer ### -->
<span id="imprint">
<a href="{$baseurl}impressum.html">Impressum</a>
</span>
<ul>
<li>
<!-- Creative Commons License -->
<xsl:comment>
<xsl:text> Creative Commons License </xsl:text>
</xsl:comment>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/de/deed.de">
<img src="{$baseurl}images/cc-somerights20.png"
width="88" height="31"
alt="Creative Commons License"
title="Creative Commons Attribution-ShareAlike 2.0 Germany License" />
</a>
<xsl:comment>
<xsl:text>
&lt;rdf:RDF xmlns="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
&lt;Work rdf:about=""&gt;
&lt;dc:type rdf:resource="http://purl.org/dc/dcmitype/Interactive" /&gt;
&lt;license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/de/" /&gt;
&lt;/Work&gt;
<xsl:template match="link">
<a href="{@href}">
<xsl:if test="@class">
<xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute>
</xsl:if>
&lt;License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/de/"&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
&lt;requires rdf:resource="http://web.resource.org/cc/ShareAlike" /&gt;
&lt;/License&gt;
&lt;/rdf:RDF&gt;
</xsl:text>
</xsl:comment>
</li>
<li>
<a href="http://www.w3.org/html/logo/">
<img src="{$baseurl}images/html5-badge-h-multimedia-semantics.png"
width="83" height="32"
alt="HTML5 Powered with Multimedia, and Semantics"
title="HTML5 Powered with Multimedia, and Semantics"/>
</a>
</li>
</ul>
<xsl:apply-templates/>
</a>
</xsl:template>
<small class="hidden">
Cover, Concealment, Camouflage, Denial and Deception
</small>
</footer>
</div>
</body> <!-- ## END OF HTML BODY ## -->
</html>
</xsl:template>
<xsl:template match="xhtml:*"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:copy-of select="."/>
</xsl:template>
<!--
# Identity transformation for all elements
@ -162,10 +124,9 @@
# Taken from
# http://stackoverflow.com/questions/10454114/xslt-template-for-any-node-not-already-handled
-->
<xsl:template match="@* | node()">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:template>
</xsl:stylesheet>