Generate an iCalendar format events.ics file from events.xml so that
iCal, Entourage, Sunbird and other users can now subscribe to the events calendar via the URL http://www.FreeBSD.org/events/events.ics. Discussed on: doc
This commit is contained in:
parent
f5c5d776f3
commit
f28fbb8c43
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/www/; revision=25397
2 changed files with 122 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
|||
# $FreeBSD: www/en/events/Makefile,v 1.6 2004/04/06 00:05:46 phantom Exp $
|
||||
# $FreeBSD: www/en/events/Makefile,v 1.7 2004/04/06 11:36:12 phantom Exp $
|
||||
|
||||
.if exists(../Makefile.conf)
|
||||
.include "../Makefile.conf"
|
||||
|
@ -12,8 +12,10 @@ SUBDIR+= 2003
|
|||
|
||||
DATA= events.css
|
||||
DATA+= events.html
|
||||
DATA+= events.ics
|
||||
|
||||
CLEANFILES+= events.html
|
||||
CLEANFILES+= events.ics
|
||||
CLEANFILES+= curdate.xml
|
||||
|
||||
INDEXLINK= events.html
|
||||
|
@ -29,6 +31,10 @@ events.html: events.xsl events.xml ../includes.xsl curdate.xml
|
|||
-${TIDY} ${TIDYOPTS} ${.TARGET}
|
||||
.endif
|
||||
|
||||
events.ics: events.xml
|
||||
${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
|
||||
${WEB_PREFIX}/share/sgml/events2ics.xsl ${.CURDIR}/events.xml
|
||||
|
||||
lint:
|
||||
${XMLLINT} --valid -o /dev/null ${.CURDIR}/events.xml
|
||||
|
||||
|
|
115
share/sgml/events2ics.xsl
Normal file
115
share/sgml/events2ics.xsl
Normal file
|
@ -0,0 +1,115 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
|
||||
<!-- Copyright (c) 2005 Ceri Davies <ceri@FreeBSD.org>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
$FreeBSD$
|
||||
-->
|
||||
|
||||
<!-- Generate an iCalendar file from a www/en/events/events.dtd
|
||||
compliant events.xml -->
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
|
||||
xmlns:cvs="http://www.FreeBSD.org/XML/CVS"
|
||||
exclude-result-prefixes="cvs">
|
||||
|
||||
<xsl:variable name="freebsd-web-base" select="'http://www.FreeBSD.org'"/>
|
||||
|
||||
<xsl:output method="text" encoding="iso-8859-1"/>
|
||||
<xsl:strip-space elements="*"/>
|
||||
|
||||
<!-- Template: events -->
|
||||
<xsl:template match="events">BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:$FreeBSD$
|
||||
<xsl:apply-templates select="event"/>
|
||||
END:VCALENDAR</xsl:template>
|
||||
|
||||
<!-- Template: event -->
|
||||
<xsl:template match="event">
|
||||
BEGIN:VEVENT
|
||||
SEQUENCE:<xsl:value-of select="position()" />
|
||||
SUMMARY:<xsl:value-of select="name"/>
|
||||
<xsl:if test="url">
|
||||
<xsl:apply-templates select="url"/>
|
||||
</xsl:if>
|
||||
LOCATION:<xsl:if test="location/site!=''">
|
||||
<xsl:value-of select="location/site"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="location/city!=''">
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:value-of select="location/city"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="location/state!=''">
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:value-of select="location/state"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="location/country!=''">
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:value-of select="location/country"/>
|
||||
</xsl:if>
|
||||
<xsl:call-template name="gen-ical-date-interval">
|
||||
<xsl:with-param name="startdate" select="startdate" />
|
||||
<xsl:with-param name="enddate" select="enddate" />
|
||||
</xsl:call-template>
|
||||
DESCRIPTION:<xsl:copy-of select="description/child::node()"/>
|
||||
<xsl:if test="link">
|
||||
<xsl:apply-templates select="link"/>
|
||||
</xsl:if>
|
||||
END:VEVENT</xsl:template>
|
||||
|
||||
<!-- Template: link -->
|
||||
<xsl:template match="link">
|
||||
<xsl:apply-templates select="url"/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Template: url -->
|
||||
<xsl:template match="url">
|
||||
URL;VALUE=URI:<xsl:choose>
|
||||
<xsl:when test="@type='freebsd-website'">
|
||||
<xsl:value-of select="$freebsd-web-base"/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:value-of select="."/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate iCalendar DTSTART and DTEND entries -->
|
||||
<xsl:template name="gen-ical-date-interval">
|
||||
<xsl:param name="startdate"/>
|
||||
<xsl:param name="enddate"/>
|
||||
|
||||
DTSTART;VALUE=DATE:<xsl:value-of select="concat(startdate/year,
|
||||
format-number(startdate/month, '00'),
|
||||
format-number(startdate/day, '00'))"/>
|
||||
|
||||
<xsl:if test="number(startdate/month) != number(enddate/month) or
|
||||
number(startdate/day) != number(enddate/day) or
|
||||
number(startdate/year) != number(enddate/year)">
|
||||
DTEND;VALUE=DATE:<xsl:value-of select="concat(enddate/year,
|
||||
format-number(enddate/month, '00'),
|
||||
format-number(enddate/day, '00'))"/>
|
||||
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
Loading…
Reference in a new issue