Permalink
Browse files

Implement the new download area.

Use the new Configuration Parameters feature of Servlex.
  • Loading branch information...
fgeorges committed Dec 28, 2013
1 parent 34c750e commit 76aaa18307ba3fc8c6d73b3ec8007759e9faaa80
@@ -15,7 +15,130 @@
<xsl:param name="menus" as="element(menu)+" select="doc('sitemap.xml')/sitemap/menu"/>
<xsl:param name="config-file" select="'../../../expath-website/config.xml'"/>
<!--
Display the download area page, from the files repository.
-->
<xsl:function name="app:download-area-servlet">
<!-- the http request -->
<xsl:param name="request" as="element(web:request)"/>
<!-- the list of files -->
<xsl:variable name="list" select="
doc(resolve-uri('files.xml', web:config-param('web-files-dir')))/files"/>
<web:response status="200" message="Ok">
<web:body content-type="text/html" method="xhtml"/>
</web:response>
<xsl:variable name="doc" as="element(webpage)">
<webpage menu="main" xmlns="">
<title>EXPath - Download</title>
<section>
<title>Download</title>
<para>Here are the latest version of the available components. For
earlier versions, please check individual download areas.</para>
<divider/>
<xsl:apply-templates select="$list/area"/>
</section>
</webpage>
</xsl:variable>
<xsl:apply-templates select="$doc">
<xsl:with-param name="page-name" select="'download'"/>
</xsl:apply-templates>
</xsl:function>
<xsl:template match="area[@dir]">
<primary xmlns="">
<title>
<xsl:value-of select="name"/>
</title>
<para>
<xsl:text>See the dedicated download </xsl:text>
<link href="files/{ @dir }">
<xsl:text>area</xsl:text>
</link>
<xsl:text> for all versions.</xsl:text>
</para>
<list>
<xsl:for-each select="component">
<item>
<xsl:value-of select="name"/>
<xsl:text>: </xsl:text>
<link href="file/{ ../@dir }/{ file/@href }">
<xsl:value-of select="file/@href"/>
</link>
</item>
</xsl:for-each>
</list>
</primary>
</xsl:template>
<!--
Display a specific download area page, from the files repository.
-->
<xsl:function name="app:download-page-servlet">
<!-- the http request -->
<xsl:param name="request" as="element(web:request)"/>
<!-- the name of the specific area -->
<xsl:variable name="area-name" as="xs:string" select="
$request/web:path/web:match[@name eq 'area']"/>
<!-- the list of files -->
<xsl:variable name="area" select="
doc(resolve-uri(concat($area-name, '/__files.xml'), web:config-param('web-files-dir')))/area"/>
<web:response status="200" message="Ok">
<web:body content-type="text/html" method="xhtml"/>
</web:response>
<xsl:variable name="doc" as="element(webpage)">
<webpage menu="download" xmlns="" root="..">
<title>EXPath - Download</title>
<section>
<title>
<xsl:text>Download: </xsl:text>
<xsl:value-of select="$area/name"/>
</title>
<xsl:apply-templates select="$area/component"/>
</section>
</webpage>
</xsl:variable>
<xsl:apply-templates select="$doc">
<xsl:with-param name="page-name" select="'download'"/>
</xsl:apply-templates>
</xsl:function>
<xsl:template match="component">
<primary xmlns="">
<title>
<xsl:value-of select="name"/>
</title>
<list>
<xsl:for-each select="file">
<item>
<link href="../file/{ ../../@dir }/{ @href }">
<xsl:value-of select="@href"/>
</link>
</item>
</xsl:for-each>
</list>
</primary>
</xsl:template>
<!--
Return a file straight from the web-files repository.
-->
<xsl:function name="app:download-file-servlet">
<!-- the http request -->
<xsl:param name="request" as="element(web:request)"/>
<!-- the url param 'resource' -->
<xsl:variable name="area" select="$request/web:path/web:match[@name eq 'area']"/>
<xsl:variable name="file" select="$request/web:path/web:match[@name eq 'file']"/>
<!-- the resolved file for the resource -->
<xsl:variable name="href" select="
resolve-uri(
concat($area, '/', $file),
web:config-param('web-files-dir'))"/>
<!-- TODO: Is there a way to test the file exists? -->
<!-- TODO: Find a way to set the proper content-type... In __files.xml, maybe? -->
<web:response status="200" message="Ok">
<web:body content-type="application/octet-stream" src="{ $href }"/>
</web:response>
</xsl:function>
<!--
Display a page from the page repository, which must be a 'webpage' XML document.
@@ -93,7 +216,7 @@
<xsl:sequence select="
resolve-uri(
concat($page, '.xml'),
doc($config-file)/config/web-content-dir)"/>
web:config-param('web-content-dir'))"/>
</xsl:function>
<!--
@@ -313,8 +436,7 @@
<xsl:function name="app:get-spec-list" as="element(specs)">
<xsl:param name="param" as="xs:string"/>
<xsl:variable name="dir" as="xs:string" select="
doc($config-file)/config/*[local-name(.) eq $param]"/>
<xsl:variable name="dir" as="xs:string" select="web:config-param($param)"/>
<xsl:sequence select="
doc(resolve-uri('list.xml', $dir))/specs"/>
</xsl:function>
@@ -125,6 +125,20 @@
<item name="resources" href="resources" title="EXPath Resources">Resources</item>
<item name="map" href="map" title="EXPath Website Map">Map</item>
<item name="wiki" href="http://wiki.expath.org/wiki/EXPath" title="EXPath Wiki">Wiki</item>
<item name="download" href="files" title="EXPath Downloads">Download</item>
</menu>
<menu name="download">
<item name="nop" href=".." title="EXPath Home">Home</item>
<item name="news" href="../news" title="EXPath News">News</item>
<item name="faq" href="../faq" title="EXPath FAQ">FAQ</item>
<item name="lists" href="../lists" title="EXPath Mailing Lists">Lists</item>
<item name="modules" href="../modules" title="EXPath Modules">Modules</item>
<item name="specs" href="../specs" title="EXPath Specifications">Specs</item>
<item name="index" href="../resources" title="EXPath Resources">Resources</item>
<item name="map" href="../map" title="EXPath Website Map">Map</item>
<item name="wiki" href="http://wiki.expath.org/wiki/EXPath" title="EXPath Wiki">Wiki</item>
<item name="download" href="../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="oxygen">
@@ -137,6 +151,7 @@
<item name="index" href="../resources" title="EXPath Resources">Resources</item>
<item name="map" href="../map" title="EXPath Website Map">Map</item>
<item name="wiki" href="http://wiki.expath.org/wiki/EXPath" title="EXPath Wiki">Wiki</item>
<item name="download" href="../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="binary">
@@ -146,6 +161,7 @@
<item name="samples" href="samples" title="EXPath Binary Samples">Samples</item>
<item name="spec" href="../../spec/binary" title="EXPath Binary Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/Binary" title="EXPath Binary Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="file">
@@ -155,6 +171,7 @@
<item name="samples" href="samples" title="EXPath File Samples">Samples</item>
<item name="spec" href="../../spec/file" title="EXPath File Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/File" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="geo">
@@ -164,6 +181,7 @@
<!--item name="samples" href="samples" title="EXPath Geo Samples">Samples</item-->
<item name="spec" href="../../spec/geo" title="EXPath Geo Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/Geo" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="hc">
@@ -173,6 +191,7 @@
<item name="samples" href="samples" title="EXPath HTTP Client Samples">Samples</item>
<item name="spec" href="../../spec/http-client" title="EXPath HTTP Client Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/HttpClient" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="pkg">
@@ -181,6 +200,7 @@
<item name="implems" href="implems" title="EXPath Packaging Implems">Implementations</item>
<item name="spec" href="../../spec/pkg" title="EXPath Packaging Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/Packaging" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="webapp">
@@ -190,13 +210,15 @@
<item name="samples" href="samples" title="EXPath Webapp Samples">Samples</item>
<item name="spec" href="../../spec/webapp" title="EXPath Webapp Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/Webapp" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="xproj">
<item name="parent" href="../../modules" title="Modules">[ ../Modules ]</item>
<item name="index" href="." title="XProject Home">XProject</item>
<item name="oxygen" href="oxygen" title="XProject plugin for oXygen">oXygen Plugin</item>
<item name="wiki" href="http://wiki.expath.org/wiki/XProject" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
<menu name="zip">
@@ -206,6 +228,7 @@
<item name="samples" href="samples" title="EXPath ZIP Samples">Samples</item>
<item name="spec" href="../../spec/zip" title="EXPath ZIP Spec">Specification</item>
<item name="wiki" href="http://wiki.expath.org/wiki/Zip" title="EXPath Wiki">Wiki</item>
<item name="download" href="../../files" title="EXPath Downloads">Download</item>
</menu>
</sitemap>
@@ -108,7 +108,7 @@
<xsl:text>EXPath website version </xsl:text>
<xsl:value-of select="$version"/>
<xsl:text> (revision #</xsl:text>
<a href="http://code.google.com/p/expath/source/browse/trunk?r={ $revision }#trunk%2Fwebsite%2Fsrc">
<a href="http://github.com/expath/website/commit/{ $revision }">
<xsl:value-of select="$revision"/>
</a>
<xsl:text>)</xsl:text>
@@ -1,11 +1,36 @@
<webapp xmlns="http://expath.org/ns/webapp/descriptor"
<webapp xmlns="http://expath.org/ns/webapp"
xmlns:app="http://expath.org/ns/website"
name="http://expath.org/website"
abbrev="expath"
version="0.5.0pre1">
version="0.5.0pre2">
<!--
TODO: Create a proper error handler!
-->
<title>EXPath website</title>
<config-param id="org-spec-dir">
<name>Legacy specification directory</name>
<desc>The directory in the EXPath.org source repository where to find the specifications (and
containing the file "list.xml"). See https://code.google.com/p/expath/.</desc>
<uri>../../../expath-website/org-specs/</uri>
</config-param>
<config-param id="w3c-spec-dir">
<name>W3C specification directory</name>
<desc>The directory in the W3C EXPath CG source repository where to find the specifications
(and containing the file "list.xml"). See https://github.com/expath/expath-cg/.</desc>
<uri>../../../expath-website/expath-cg/specs/</uri>
</config-param>
<config-param id="web-content-dir">
<name>Web content directory</name>
<desc>The directory in the EXPath Web Content source repository where to find the pages
content. See https://github.com/expath/web-content/.</desc>
<uri>../../../expath-website/web-content/pages/</uri>
</config-param>
<resource pattern="/style/.+.css" media-type="text/css"/>
<resource pattern="/js/.+.js" media-type="text/javascript"/>
<resource pattern="/images/.+.png" media-type="image/png"/>
@@ -54,10 +79,10 @@
<match group="6" name="xml"/>
</url>
<!--
To resolve the above TODO, add the ability to have several URL elements
for the same SERVLET, binding several URL patterns to the same servlet.
In this case, one with an optional date (but no editor), and one with
a mandatory editor.
To resolve the above TODO, add the ability to have several URL elements
for the same SERVLET, binding several URL patterns to the same servlet.
In this case, one with an optional date (but no editor), and one with
a mandatory editor.
<url pattern="/spec/([-a-z]+)(/20[0-9]{6})?(/diff)?(.xml)?">
<match group="1" name="spec"/>
<match group="2" name="date"/>
@@ -84,6 +109,38 @@
</url>
</servlet>
<!--
The generated download area.
-->
<servlet name="download">
<xslt uri="http://expath.org/ns/website/servlets.xsl"
function="app:download-area-servlet"/>
<url pattern="/files"/>
</servlet>
<!--
A specific download area page.
-->
<servlet name="area">
<xslt uri="http://expath.org/ns/website/servlets.xsl"
function="app:download-page-servlet"/>
<url pattern="/files/([-a-z0-9]+)">
<match group="1" name="area"/>
</url>
</servlet>
<!--
Downloading a file straight from the web-files repository.
-->
<servlet name="file">
<xslt uri="http://expath.org/ns/website/servlets.xsl"
function="app:download-file-servlet"/>
<url pattern="/file/([-a-z0-9]+)/([^/]+)">
<match group="1" name="area"/>
<match group="2" name="file"/>
</url>
</servlet>
<!--
A simple, plain page.
-->
@@ -1,7 +1,7 @@
<project xmlns="http://expath.org/ns/project"
name="http://expath.org/website"
abbrev="expath-website"
version="0.5.0pre1">
version="0.5.0pre2">
<title>EXPath website</title>

0 comments on commit 76aaa18

Please sign in to comment.