- Replace /XML/{doc,www}/ with /XML/ in SysId.
- Remove empty stylesheets in share/xsl and point share/xml/empty.xsl via
  XML catalog instead.
- Change the L10N layer in freebsd-*.xsl not to use localized XSLT
  stylesheets directly.
- Move share/xsl/* to share/xml and remove share/xsl.
- Remove obsolete share/web2c/pdftex.def.
		
	
			
		
			
				
	
	
		
			345 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="iso-8859-1" ?>
 | 
						|
<!DOCTYPE xsl:stylesheet PUBLIC "-//FreeBSD//DTD FreeBSD XSLT 1.0 DTD Fragment//EN"
 | 
						|
				"http://www.FreeBSD.org/XML/share/xml/xslt10-freebsd.dtd" [
 | 
						|
<!ENTITY title "FreeBSD Events">
 | 
						|
<!ENTITY rsslink "&base;/events/rss.xml">
 | 
						|
<!ENTITY rsstitle "Upcoming FreeBSD Events">
 | 
						|
]>
 | 
						|
 | 
						|
<!-- $FreeBSD$ -->
 | 
						|
 | 
						|
<!-- Copyright (c) 2003 Simon L. Nielsen <simon@FreeBSD.org>
 | 
						|
     Copyright (c) 2008 Murray M Stokely <murray@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.
 | 
						|
-->
 | 
						|
 | 
						|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 | 
						|
  xmlns:date="http://exslt.org/dates-and-times"
 | 
						|
  xmlns="http://www.w3.org/1999/xhtml"
 | 
						|
  extension-element-prefixes="date">
 | 
						|
 | 
						|
  <xsl:import href="http://www.FreeBSD.org/XML/lang/share/xml/libcommon.xsl"/>
 | 
						|
  <xsl:import href="http://www.FreeBSD.org/XML/share/xml/xhtml.xsl"/>
 | 
						|
 | 
						|
  <xsl:param name="startyear">2007</xsl:param>
 | 
						|
  <xsl:param name="pastyears">2003 2004 2005 2006</xsl:param>
 | 
						|
 | 
						|
  <xsl:key name="event-by-month" match="event"
 | 
						|
    use="concat(startdate/year, format-number(startdate/month, '00'))"/>
 | 
						|
 | 
						|
  <xsl:key name="event-by-country" match="event"
 | 
						|
    use="location/country" />
 | 
						|
 | 
						|
  <xsl:key name="upcoming-event-by-country" match="event[((number(enddate/year) > number(date:year())) or
 | 
						|
	    (number(enddate/year) = number(date:year()) and
 | 
						|
	     number(enddate/month) > number(date:month-in-year())) or
 | 
						|
	    (number(enddate/year) = number(date:year()) and
 | 
						|
	     number(enddate/month) = number(date:month-in-year()) and
 | 
						|
	     enddate/day >= date:day-in-month()))]"
 | 
						|
    use="location/country" />
 | 
						|
 | 
						|
  <xsl:variable name="charturl" select="'http://chart.apis.google.com/chart?cht=t&chs=400x200&chtm=world&chco=ffffff,ffbe38,600000&chf=bg,s,4D89F9'" />
 | 
						|
 | 
						|
  <xsl:variable name="title">&title;</xsl:variable>
 | 
						|
 | 
						|
  <xsl:variable name="rsstitle">&rsstitle;</xsl:variable>
 | 
						|
 | 
						|
  <xsl:variable name="rsslink">&rsslink;</xsl:variable>
 | 
						|
 | 
						|
  <xsl:template name="process.content">
 | 
						|
  <xsl:variable name="chart-countries">
 | 
						|
    <xsl:for-each select="//event[
 | 
						|
	generate-id() =
 | 
						|
	generate-id(key('event-by-country', location/country)[1])]">
 | 
						|
      <xsl:sort select="format-number(count(key('event-by-country', location/country)), '000')" order="descending"/>
 | 
						|
        <xsl:value-of select="location/country/@code" />
 | 
						|
    </xsl:for-each>
 | 
						|
  </xsl:variable>
 | 
						|
 | 
						|
  <xsl:variable name="chart-country-counts">
 | 
						|
    <xsl:for-each select="//event[
 | 
						|
	generate-id() =
 | 
						|
	generate-id(key('event-by-country', location/country)[1])]">
 | 
						|
      <xsl:sort select="format-number(count(key('event-by-country', location/country)), '000')" order="descending"/>
 | 
						|
        <xsl:if test="count(key('upcoming-event-by-country', location/country)) != 0">100.0</xsl:if>
 | 
						|
        <xsl:if test="count(key('upcoming-event-by-country', location/country)) = 0"><xsl:value-of select="count(key('event-by-country', location/country))" />.0</xsl:if>
 | 
						|
        <xsl:if test="position()!=last()">,</xsl:if></xsl:for-each>
 | 
						|
  </xsl:variable>
 | 
						|
 | 
						|
  <xsl:variable name="imageurl"><xsl:value-of select="$charturl"/>&chd=t:<xsl:value-of select="$chart-country-counts"/>&chld=<xsl:value-of select="$chart-countries"/></xsl:variable>
 | 
						|
 | 
						|
              <div id="sidewrap">
 | 
						|
                &nav.community;
 | 
						|
                <div id="feedlinks">
 | 
						|
                  <ul>
 | 
						|
                    <li>
 | 
						|
                      <a href="&rsslink;" title="&rsstitle;">
 | 
						|
                        RSS 2.0 Feed
 | 
						|
                      </a>
 | 
						|
                    </li>
 | 
						|
                  </ul>
 | 
						|
                </div> <!-- FEEDLINKS -->
 | 
						|
              </div> <!-- SIDEWRAP -->
 | 
						|
 | 
						|
	      <div id="contentwrap">
 | 
						|
		<h1>&title;</h1>
 | 
						|
 	<!--
 | 
						|
	     Note the current date to have a reference, if the
 | 
						|
	     upcoming/past events are split incorrectly.
 | 
						|
	-->
 | 
						|
	<xsl:comment>
 | 
						|
	  <xsl:text>Generated on: </xsl:text>
 | 
						|
	  <xsl:value-of select="concat($curdate.year,
 | 
						|
	    format-number($curdate.month, '00'),
 | 
						|
	    format-number($curdate.day, '00'))"/>
 | 
						|
	</xsl:comment>
 | 
						|
 | 
						|
	<xsl:for-each select="/events">
 | 
						|
		<xsl:call-template name="html-events-list-preface" />
 | 
						|
 | 
						|
		<xsl:call-template name="html-events-map">
 | 
						|
		  <xsl:with-param name="mapurl" select="$imageurl" />
 | 
						|
		</xsl:call-template>
 | 
						|
 | 
						|
		<xsl:call-template name="html-events-list-upcoming-heading" />
 | 
						|
	</xsl:for-each>
 | 
						|
 | 
						|
	<xsl:for-each select="/events/event[generate-id() =
 | 
						|
          generate-id(key('event-by-month',
 | 
						|
	    concat(startdate/year, format-number(startdate/month, '00')))[1])
 | 
						|
	  and ((number(enddate/year) > number($curdate.year)) or
 | 
						|
	    (number(enddate/year) = number($curdate.year) and
 | 
						|
	     number(enddate/month) > number($curdate.month)) or
 | 
						|
	    (number(enddate/year) = number($curdate.year) and
 | 
						|
	     number(enddate/month) = number($curdate.month) and
 | 
						|
	     enddate/day >= $curdate.day))]">
 | 
						|
 | 
						|
	  <xsl:sort select="startdate/year" order="ascending"/>
 | 
						|
	  <xsl:sort select="format-number(startdate/month, '00')" order="ascending"/>
 | 
						|
	  <xsl:sort select="format-number(startdate/day, '00')" order="ascending"/>
 | 
						|
 | 
						|
	  <h3>
 | 
						|
	    <xsl:attribute name="id">
 | 
						|
	      <xsl:text>month:</xsl:text>
 | 
						|
	      <xsl:value-of select="concat(startdate/year,
 | 
						|
		format-number(startdate/month, '00'))"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	    <xsl:call-template name="gen-long-en-month">
 | 
						|
	      <xsl:with-param name="nummonth" select="startdate/month"/>
 | 
						|
	    </xsl:call-template>
 | 
						|
	    <xsl:text> </xsl:text>
 | 
						|
	    <xsl:value-of select="startdate/year"/>
 | 
						|
	  </h3>
 | 
						|
 | 
						|
	  <ul>
 | 
						|
	    <xsl:for-each select="key('event-by-month',
 | 
						|
	      concat(startdate/year, format-number(startdate/month, '00')))">
 | 
						|
 | 
						|
	      <xsl:sort select="format-number(startdate/day, '00')" order="ascending"/>
 | 
						|
	      <xsl:apply-templates select="." mode="upcoming"/>
 | 
						|
	    </xsl:for-each>
 | 
						|
	  </ul>
 | 
						|
	</xsl:for-each>
 | 
						|
 | 
						|
	<xsl:for-each select="/events">
 | 
						|
		<xsl:call-template name="html-events-list-past-heading" />
 | 
						|
	</xsl:for-each>
 | 
						|
 | 
						|
	<xsl:for-each select="/events/event[generate-id() =
 | 
						|
	  generate-id(key('event-by-month', concat(startdate/year,
 | 
						|
	    format-number(startdate/month, '00')))[1])
 | 
						|
	  and ((number(enddate/year) >= $startyear)) and
 | 
						|
           ((number(enddate/year) < number($curdate.year)) or
 | 
						|
	    (number(enddate/year) = number($curdate.year) and
 | 
						|
	     number(enddate/month) < number($curdate.month)) or
 | 
						|
	    (number(enddate/year) = number($curdate.year) and
 | 
						|
	     number(enddate/month) = number($curdate.month) and
 | 
						|
	     number(enddate/day) < number($curdate.day)))]">
 | 
						|
 | 
						|
	  <xsl:sort select="number(startdate/year)" order="descending"/>
 | 
						|
	  <xsl:sort select="format-number(startdate/month, '00')" order="descending"/>
 | 
						|
	  <xsl:sort select="format-number(startdate/day, '00')" order="descending"/>
 | 
						|
 | 
						|
	  <h3>
 | 
						|
	    <xsl:attribute name="id">
 | 
						|
	      <xsl:text>month:</xsl:text>
 | 
						|
	      <xsl:value-of select="concat(startdate/year,
 | 
						|
		format-number(startdate/month, '00'))"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	    <xsl:call-template name="gen-long-en-month">
 | 
						|
	      <xsl:with-param name="nummonth" select="startdate/month"/>
 | 
						|
	    </xsl:call-template >
 | 
						|
	    <xsl:text> </xsl:text>
 | 
						|
	    <xsl:value-of select="startdate/year"/>
 | 
						|
	  </h3>
 | 
						|
 | 
						|
	  <ul>
 | 
						|
	    <xsl:for-each select="key('event-by-month',
 | 
						|
	      concat(startdate/year, format-number(startdate/month, '00')))">
 | 
						|
 | 
						|
	      <xsl:sort select="format-number(startdate/day, '00')" order="descending"/>
 | 
						|
	      <xsl:apply-templates select="."/>
 | 
						|
	    </xsl:for-each>
 | 
						|
	  </ul>
 | 
						|
	</xsl:for-each>
 | 
						|
 | 
						|
	<p>Events from past years:</p>
 | 
						|
 | 
						|
        <ul id="events-past-years">
 | 
						|
	<xsl:for-each select="/events">
 | 
						|
	<xsl:call-template name="split-string">
 | 
						|
          <xsl:with-param name="seperator" select="' '"/>
 | 
						|
          <xsl:with-param name="text" select="$pastyears"/>
 | 
						|
        </xsl:call-template>
 | 
						|
	</xsl:for-each>
 | 
						|
        </ul>
 | 
						|
	      </div> <!-- contentwrap -->
 | 
						|
 | 
						|
	      <br class="clearboth" />
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- Template: event -->
 | 
						|
  <xsl:template name="eventbody">
 | 
						|
      <xsl:attribute name="id">
 | 
						|
	<xsl:call-template name="generate-event-anchor"/>
 | 
						|
      </xsl:attribute>
 | 
						|
 | 
						|
      <p>
 | 
						|
	<b>
 | 
						|
	  <xsl:if test="url">
 | 
						|
	    <xsl:apply-templates select="url"/>
 | 
						|
	  </xsl:if>
 | 
						|
	  <xsl:if test="not(url)">
 | 
						|
	    <xsl:value-of select="name"/>
 | 
						|
	  </xsl:if>
 | 
						|
	</b>
 | 
						|
	<xsl:if test="location/site!=''">
 | 
						|
	  <xsl:text>, </xsl:text>
 | 
						|
	  <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>
 | 
						|
	<br/>
 | 
						|
	<em>
 | 
						|
	  <xsl:call-template name="gen-date-interval">
 | 
						|
	    <xsl:with-param name="startdate" select="startdate" />
 | 
						|
	    <xsl:with-param name="enddate" select="enddate" />
 | 
						|
	  </xsl:call-template>
 | 
						|
	</em><br/>
 | 
						|
	<xsl:copy-of select="description/child::node()"/>
 | 
						|
      </p>
 | 
						|
      <xsl:if test="link">
 | 
						|
	<p><xsl:apply-templates select="link"/></p>
 | 
						|
      </xsl:if>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- Template: event -->
 | 
						|
  <xsl:template match="event" mode="upcoming">
 | 
						|
    <li>
 | 
						|
      <xsl:call-template name="eventbody"/>
 | 
						|
    </li>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- Template: event -->
 | 
						|
  <xsl:template match="event">
 | 
						|
    <xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
 | 
						|
    <xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
 | 
						|
    <xsl:variable name="name" select="name" />
 | 
						|
    <xsl:variable name="lcname" select="translate($name, $upper, $lower)" />
 | 
						|
 | 
						|
<!-- Note that only AsiaBSDCon, DCBSDCon, MeetBSD, and NYCBSDCon have
 | 
						|
     a significant number of videos on YouTube so we hard code them
 | 
						|
     for now.  When we have a better track record of getting videos
 | 
						|
     from our conferences posted to YouTube then we can implement a
 | 
						|
     more generic solution here, but for now we don't want to add the
 | 
						|
     link to youtube when we know in most cases there is no content
 | 
						|
     there. -->
 | 
						|
 | 
						|
    <li>
 | 
						|
      <xsl:call-template name="eventbody"/>
 | 
						|
      <p>Social links: <a rel="nofollow">
 | 
						|
        <xsl:attribute name="href">http://www.flickr.com/search/?w=all&q=<xsl:value-of select="name" />&m=text</xsl:attribute>
 | 
						|
      Flickr</a>, <a rel="nofollow">
 | 
						|
        <xsl:attribute name="href">http://blogsearch.google.com/blogsearch?q=<xsl:value-of select="name" /></xsl:attribute>Blog Search</a><xsl:if test="contains($lcname, 'meetbsd') or contains($lcname, 'nycbsdcon') or contains($lcname, 'dcbsdcon') or contains($lcname, 'asiabsdcon')">,
 | 
						|
        <a rel="nofollow">
 | 
						|
        <xsl:attribute name="href">http://www.youtube.com/results?search_query=bsdconferences+<xsl:value-of select="name" /></xsl:attribute>YouTube</a></xsl:if>.</p>
 | 
						|
    </li>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- Template: link -->
 | 
						|
  <xsl:template match="link">
 | 
						|
    <xsl:apply-templates select="url"/>
 | 
						|
    <xsl:if test="not(position()=last())">
 | 
						|
      <xsl:text> </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- Template: url -->
 | 
						|
  <xsl:template match="url">
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
	<xsl:if test="@type='freebsd-website'">&base;</xsl:if>
 | 
						|
        <xsl:value-of select="."/>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:value-of select="../name"/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template name="split-string">
 | 
						|
    <xsl:param name="seperator"/>
 | 
						|
    <xsl:param name="text"/>
 | 
						|
    <xsl:variable name="first" select="substring-before($text, $seperator)"/>
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="$first or substring-after($text,$seperator)">
 | 
						|
        <xsl:if test="$first">
 | 
						|
          <li><a>
 | 
						|
	    <xsl:attribute name="href">events<xsl:value-of select="$first"/>.html</xsl:attribute>
 | 
						|
            <xsl:value-of select="$first" />
 | 
						|
          </a></li>
 | 
						|
        </xsl:if>
 | 
						|
        <xsl:call-template name="split-string">
 | 
						|
          <xsl:with-param name="text" select="substring-after($text,$seperator)"/>
 | 
						|
          <xsl:with-param name="seperator" select="$seperator"/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
          <li><a>
 | 
						|
	    <xsl:attribute name="href">events<xsl:value-of select="$text"/>.html</xsl:attribute>
 | 
						|
            <xsl:value-of select="$text" />
 | 
						|
          </a></li>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
   </xsl:template>
 | 
						|
 | 
						|
</xsl:stylesheet>
 |