<!--
Stylesheet to convert Dilbert daily strips to RSS.
- Copyright (C) 2013 Antonio Ospite <ospite@studenti.unina.it>
+ Copyright (C) 2013-2014 Antonio Ospite <ao2@ao2.it>
This file is part of tweeper.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
- xsl:extension-element-prefixes="php">
+ xsl:extension-element-prefixes="php"
+ exclude-result-prefixes="php">
<xsl:output method="xml" indent="yes"/>
- <xsl:variable name="BaseURL" select="concat('http://', //meta[@property='og:site_name']/@content)"/>
+ <xsl:variable name="BaseURL" select="//meta[@property='og:url']/@content"/>
- <xsl:template match="//a[@id='strip_zoom']">
- <xsl:variable name="picture-id" select="substring-after(./@href, '#')"/>
- <xsl:variable name="picture-element" select="//div[@id=$picture-id]/img"/>
- <xsl:variable name="picture-print-url" select="php:functionString('str_replace', 'zoom', 'print', $picture-element/@src)"/>
+ <xsl:template match="//section[@class='comic-item']">
+ <xsl:variable name="item-permalink" select=".//a[@class='img-comic-link']/@href"/>
+ <xsl:variable name="picture-url" select=".//img[@class='img-responsive img-comic']/@src"/>
+ <xsl:variable name="picture-title" select=".//img[@class='img-responsive img-comic']/@alt"/>
<item>
<title>
- <xsl:value-of select="$picture-element/@title"/>
+ <xsl:variable name="title-length" select="140"/>
+ <!-- ellipsize, inspired from http://stackoverflow.com/questions/13622338 -->
+ <xsl:choose>
+ <xsl:when test="string-length($picture-title) > $title-length">
+ <xsl:variable name="truncated-length" select="$title-length - 3"/>
+ <xsl:value-of select="substring($picture-title, 1, $truncated-length)"/>
+ <xsl:text>...</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$picture-title"/>
+ </xsl:otherwise>
+ </xsl:choose>
</title>
<link>
- <xsl:value-of select="concat($BaseURL, $picture-element/@src)"/>
+ <xsl:value-of select="$item-permalink"/>
</link>
+ <guid>
+ <xsl:value-of select="$item-permalink"/>
+ </guid>
<pubDate>
- <xsl:value-of select="php:functionString('Tweeper::str_to_gmdate', substring-after($picture-id, 'strip_enlarged_'))"/>
+ <xsl:value-of select="php:functionString('Tweeper::strToRssDate', normalize-space(.//date))"/>
</pubDate>
<description>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
- <img src="{$picture-print-url}" />
+ <img src="{$picture-url}" alt="{$picture-title}"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</description>
+ <xsl:if test="$generate-enclosure = 1">
+ <xsl:copy-of select="php:function('Tweeper::generateEnclosure', string($picture-url))"/>
+ </xsl:if>
</item>
</xsl:template>
<xsl:template match="/">
+ <xsl:variable name="channel-title" select="//meta[@property='og:title']/@content"/>
+ <xsl:variable name="channel-link" select="$BaseURL"/>
<rss version="2.0">
+ <xsl:attribute name="xml:base"><xsl:value-of select="$BaseURL" /></xsl:attribute>
<channel>
<generator>Tweeper</generator>
<title>
- <xsl:value-of select="//meta[@property='og:title']/@content"/>
+ <xsl:value-of select="$channel-title"/>
</title>
<link>
- <xsl:value-of select="$BaseURL"/>
+ <xsl:value-of select="$channel-link"/>
</link>
<description>
<xsl:value-of select="//meta[@property='og:description']/@content"/>
</description>
<image>
+ <title>
+ <xsl:value-of select="$channel-title"/>
+ </title>
+ <link>
+ <xsl:value-of select="$channel-link"/>
+ </link>
<url>
- <xsl:value-of select="//meta[@property='og:image']/@content"/>
+ <xsl:value-of select="concat($BaseURL, //img[@alt='Dilbert logo']/@src)"/>
</url>
</image>
- <xsl:apply-templates select="//a[@id='strip_zoom']"/>
+ <xsl:apply-templates select="//section[@class='comic-item']"/>
</channel>
</rss>
</xsl:template>