summaryrefslogtreecommitdiff
path: root/modules/sitemap/gss.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'modules/sitemap/gss.xsl')
-rw-r--r--modules/sitemap/gss.xsl375
1 files changed, 375 insertions, 0 deletions
diff --git a/modules/sitemap/gss.xsl b/modules/sitemap/gss.xsl
new file mode 100644
index 0000000000..49fd5c2376
--- /dev/null
+++ b/modules/sitemap/gss.xsl
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Google Sitemaps Stylesheets (GSStylesheets)
+ Project Home: http://sourceforge.net/projects/gstoolbox
+ Copyright (c) 2005 Baccou Bonneville SARL (http://www.baccoubonneville.com)
+ License http://www.gnu.org/copyleft/lesser.html GNU/LGPL
+
+ Created by Serge Baccou
+ 1.0 / 20 Aug 2005
+
+ Changes by Johannes Müller ( http://GSiteCrawler.com/ )
+ 1.1 / 20 Aug 2005 - sorting by clicking on column headers
+ - open urls in new window/tab
+ - some stylesheet/CSS cleanup
+
+ Changes by Tobias Kluge ( http://enarion.net/ )
+ 1.2 / 22 Aug 2005 - moved sitemap file and sitemap index file into one file gss.xsl
+ 1.5 / 27 Aug 2005 - added js and css into xslt stylesheet; only gss.xsl is needed now
+
+ Changes by Serge Baccou
+ 1.3 / 23 Aug 2005 - some XSLT cleanup
+ 1.4 / 24 Aug 2005 - sourceForge and LGPL links and logos
+ - sorting is working for siteindex (see gss.js)
+
+ Johannes Müller ( http://gsitecrawler.com/ )
+ 1.5a/ 31 Aug 2005 - added version number in footer
+ - removed images (don't allow tracking on other servers)
+ 1.5b/ 05 Jul 2006 - removed (unnecessary) link to (missing) CSS file
+ - moved necessary items from Googles CSS file intern
+ - javascript code not compatible with Opera 9.0
+ 1.6/ 19 Nov 2006 - Changed namespace to http://www.sitemaps.org/schemas/sitemap/0.9
+
+ Minor cleanup for use in PhpGedView
+-->
+
+<xsl:stylesheet version="2.0"
+ xmlns:html="http://www.w3.org/TR/REC-html40"
+ xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
+ xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes"/>
+
+ <!-- Root template -->
+ <xsl:template match="/">
+ <html>
+ <head>
+ <title>Sitemap File for </title>
+ <style type="text/css">
+ <![CDATA[
+ <!--
+ body {
+ font-family: arial, sans-serif;
+ font-size: 0.8em;
+ height:100%;
+ }
+ body * {
+ font-size: 100%;
+ }
+ h1 {
+ font-weight:bold;
+ font-size:1.5em;
+ margin-bottom:0;
+ margin-top:1px;
+ }
+ h2 {
+ font-weight:bold;
+ font-size:1.2em;
+ margin-bottom:0;
+ color:#707070;
+ margin-top:1px;
+ }
+ h3 {
+ font-weight:bold;
+ font-size:1.2em;
+ margin-bottom:0;
+ color:#000;
+ margin-top:1px;
+ }
+ td, th {
+ font-family: arial, sans-serif;
+ font-size: 0.9em;
+ }
+ .header {
+ font-weight: bold;
+ font-size: 1.1em;
+ border-bottom: 1px solid #dbe6de;
+ color: #496b9b;
+ background-color: #e5ecf9;
+ }
+ p.sml {
+ font-size:0.8em;
+ margin-top:0;
+ }
+ .data {
+ border-collapse:collapse;
+ border:1px solid #b0b0b0;
+ margin-top:3px;
+ width:100%;
+ padding:5em;
+ }
+ .data td {
+ border-bottom:1px solid #b0b0b0;
+ text-align:left;
+ padding:3px;
+ }
+ .sortup {
+ background-position: right center;
+ background-image: url(sortup.gif);
+ background-repeat: no-repeat;
+ font-style:italic;
+ white-space:pre;
+ }
+ .sortdown {
+ background-position: right center;
+ background-image: url(sortdown.gif);
+ background-repeat: no-repeat;
+ font-style:italic;
+ white-space:pre;
+ }
+ table.copyright {
+ width:100%;
+ border-top:1px solid #3366CC;
+ margin-top:1em;
+ text-align:center;
+ padding-top:1em;
+ vertical-align:top;
+ }
+ .copyright {
+ color: #6F6F6F;
+ font-size: 0.8em;
+ }
+ -->
+ ]]>
+ </style>
+ <script language="JavaScript">
+ <![CDATA[
+ var selectedColor = "blue";
+ var defaultColor = "black";
+ var hdrRows = 1;
+ var numeric = '..';
+ var desc = '..';
+ var html = '..';
+ var freq = '..';
+
+ function initXsl(tabName,fileType) {
+ hdrRows = 1;
+
+ if(fileType=="sitemap") {
+ numeric = ".3.";
+ desc = ".1.";
+ html = ".0.";
+ freq = ".2.";
+ initTable(tabName);
+ setSort(tabName, 3, 1);
+ } else {
+ desc = ".1.";
+ html = ".0.";
+ initTable(tabName);
+ setSort(tabName, 1, 1);
+ }
+
+ var theURL = document.getElementById("head1");
+ theURL.innerHTML += ' ' + location;
+ document.title += ': ' + location;
+ }
+
+ function initTable(tabName) {
+ var theTab = document.getElementById(tabName);
+ for(r=0;r<hdrRows;r++)
+ for(c=0;c<theTab.rows[r].cells.length;c++)
+ if((r+theTab.rows[r].cells[c].rowSpan)>hdrRows)
+ hdrRows=r+theTab.rows[r].cells[c].rowSpan;
+ for(r=0;r<hdrRows; r++){
+ colNum = 0;
+ for(c=0;c<theTab.rows[r].cells.length;c++, colNum++){
+ if(theTab.rows[r].cells[c].colSpan<2){
+ theCell = theTab.rows[r].cells[c];
+ rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;/g,'');
+ if(rTitle>""){
+ theCell.title = "Change sort order for " + rTitle;
+ theCell.onmouseover = function(){setCursor(this, "selected")};
+ theCell.onmouseout = function(){setCursor(this, "default")};
+ var sortParams = 15; // bitmapped: numeric|desc|html|freq
+ if(numeric.indexOf("."+colNum+".")>-1) sortParams -= 1;
+ if(desc.indexOf("."+colNum+".")>-1) sortParams -= 2;
+ if(html.indexOf("."+colNum+".")>-1) sortParams -= 4;
+ if(freq.indexOf("."+colNum+".")>-1) sortParams -= 8;
+ theCell.onclick = new Function("sortTable(this,"+(colNum+r)+","+hdrRows+","+sortParams+")");
+ }
+ } else {
+ colNum = colNum+theTab.rows[r].cells[c].colSpan-1;
+ }
+ }
+ }
+ }
+
+ function setSort(tabName, colNum, sortDir) {
+ var theTab = document.getElementById(tabName);
+ theTab.rows[0].sCol = colNum;
+ theTab.rows[0].sDir = sortDir;
+ if (sortDir)
+ theTab.rows[0].cells[colNum].className='sortdown'
+ else
+ theTab.rows[0].cells[colNum].className='sortup';
+ }
+
+ function setCursor(theCell, mode){
+ rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;|\W/g,'');
+ if(mode=="selected"){
+ if(theCell.style.color!=selectedColor)
+ defaultColor = theCell.style.color;
+ theCell.style.color = selectedColor;
+ theCell.style.cursor = "hand";
+ window.status = "Click to sort by '"+rTitle+"'";
+ } else {
+ theCell.style.color = defaultColor;
+ theCell.style.cursor = "";
+ window.status = "";
+ }
+ }
+
+ function sortTable(theCell, colNum, hdrRows, sortParams){
+ var typnum = !(sortParams & 1);
+ sDir = !(sortParams & 2);
+ var typhtml = !(sortParams & 4);
+ var typfreq = !(sortParams & 8);
+ var tBody = theCell.parentNode;
+ while((tBody.nodeName!="TBODY") && (tBody.nodeName!="TABLE")) {
+ tBody = tBody.parentNode;
+ }
+ var tabOrd = new Array();
+ if(tBody.rows[0].sCol==colNum) sDir = !tBody.rows[0].sDir;
+ if (tBody.rows[0].sCol>=0)
+ tBody.rows[0].cells[tBody.rows[0].sCol].className='';
+ tBody.rows[0].sCol = colNum;
+ tBody.rows[0].sDir = sDir;
+ if (sDir)
+ tBody.rows[0].cells[colNum].className='sortdown'
+ else
+ tBody.rows[0].cells[colNum].className='sortup';
+ for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
+ colCont = tBody.rows[r].cells[colNum].innerHTML;
+ if(typhtml) colCont = colCont.replace(/<[^>]+>/g,'');
+ if(typnum) {
+ colCont*=1;
+ if(isNaN(colCont)) colCont = 0;
+ }
+ if(typfreq) {
+ switch(colCont.toLowerCase()) {
+ case "always": { colCont=0; break; }
+ case "hourly": { colCont=1; break; }
+ case "daily": { colCont=2; break; }
+ case "weekly": { colCont=3; break; }
+ case "monthly": { colCont=4; break; }
+ case "yearly": { colCont=5; break; }
+ case "never": { colCont=6; break; }
+ }
+ }
+ tabOrd[i] = [r, tBody.rows[r], colCont];
+ }
+ tabOrd.sort(compRows);
+ for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
+ tBody.insertBefore(tabOrd[i][1],tBody.rows[r]);
+ }
+ window.status = "";
+ }
+
+ function compRows(a, b){
+ if(sDir){
+ if(a[2]>b[2]) return -1;
+ if(a[2]<b[2]) return 1;
+ } else {
+ if(a[2]>b[2]) return 1;
+ if(a[2]<b[2]) return -1;
+ }
+ return 0;
+ }
+ ]]>
+ </script>
+
+ </head>
+
+ <!-- Store in $fileType if we are in a sitemap or in a siteindex -->
+ <xsl:variable name="fileType">
+ <xsl:choose>
+ <xsl:when test="//sitemap:url">sitemap</xsl:when>
+ <xsl:otherwise>siteindex</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- Body -->
+ <body onLoad="initXsl('table0','{$fileType}');">
+
+ <!-- Text and table -->
+ <h1 id="head1">Sitemap</h1>
+ <xsl:choose>
+ <xsl:when test="$fileType='sitemap'"><xsl:call-template name="sitemapTable"/></xsl:when>
+ <xsl:otherwise><xsl:call-template name="siteindexTable"/></xsl:otherwise>
+ </xsl:choose>
+
+ <!-- Copyright notice -->
+ <br/>
+ <table class="copyright" id="table_copyright">
+ <tr>
+ <td>
+ <p>Sitemap 0.90: <a href="http://www.sitemaps.org">Sitemaps.org</a> - <a href="https://www.google.com/webmasters/sitemaps/stats">My Google Sitemaps</a> - <a href="http://sitemaps.blogspot.com/">Blog</a><br/>
+ Sitemaps Stylesheets v1.6: (c) 2005-2007 <a href="http://sourceforge.net/projects/gstoolbox">Project</a></p>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+ <!-- siteindexTable template -->
+ <xsl:template name="siteindexTable">
+ <h2>Number of sitemaps in this Sitemap Index: <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"></xsl:value-of></h2>
+ <p class="sml">Click on the table headers to change sorting.</p>
+ <table border="1" width="100%" class="data" id="table1">
+ <tr class="header">
+ <td>Sitemap URL</td>
+ <td>Last modification date</td>
+ </tr>
+ <xsl:apply-templates select="sitemap:sitemapindex/sitemap:sitemap">
+ <xsl:sort select="sitemap:lastmod" order="descending"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:template>
+
+ <!-- sitemapTable template -->
+ <xsl:template name="sitemapTable">
+ <h2>Number of URLs in this Sitemap: <xsl:value-of select="count(sitemap:urlset/sitemap:url)"></xsl:value-of></h2>
+ <p class="sml">Click on the table headers to change sorting.</p>
+ <table border="1" width="100%" class="data" id="table0">
+ <tr class="header">
+ <td>Sitemap URL</td>
+ <!-- <td>Format</td> -->
+ <td>Last modification date</td>
+ <td>Change freq.</td>
+ <td>Priority</td>
+ </tr>
+ <xsl:apply-templates select="sitemap:urlset/sitemap:url">
+ <xsl:sort select="sitemap:priority" order="descending"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:template>
+
+ <!-- sitemap:url template -->
+ <xsl:template match="sitemap:url">
+ <tr>
+ <td>
+ <xsl:variable name="sitemapURL"><xsl:value-of select="sitemap:loc"/></xsl:variable>
+ <a href="{$sitemapURL}" target="_blank" ref="nofollow"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>
+ </td>
+ <!-- <td><xsl:value-of select="geo:geo/geo:format"/></td> -->
+ <td><xsl:value-of select="sitemap:lastmod"/></td>
+ <td><xsl:value-of select="sitemap:changefreq"/></td>
+ <td><xsl:value-of select="sitemap:priority"/></td>
+ </tr>
+ </xsl:template>
+
+ <!-- sitemap:sitemap template -->
+ <xsl:template match="sitemap:sitemap">
+ <tr>
+ <td>
+ <xsl:variable name="sitemapURL"><xsl:value-of select="sitemap:loc"/></xsl:variable>
+ <a href="{$sitemapURL}"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>
+ </td>
+ <td><xsl:value-of select="sitemap:lastmod"/></td>
+ </tr>
+ </xsl:template>
+
+</xsl:stylesheet>