X-Git-Url: https://git.ao2.it/tweeper.git/blobdiff_plain/5b6ed12927fe2a9ff14d1a286cfa467efd1ebbfe..2eb4e1d36fcc9c6a251b3ec33ef46920d18cb7f8:/rss_converter_twitter.com.xsl diff --git a/rss_converter_twitter.com.xsl b/rss_converter_twitter.com.xsl index b7c7124..c154141 100644 --- a/rss_converter_twitter.com.xsl +++ b/rss_converter_twitter.com.xsl @@ -32,8 +32,83 @@ <xsl:text>https://twitter.com</xsl:text> </xsl:variable> + <!-- Identity transform --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + <!-- + Anchors to external links provide the direct URL in the + data-expanded-url attribute, so use this in the href attribute too + instead of the default short URL which uses the t.co redirection + service. + + NOTE: when creating an element, attributes must be processed _before_ + adding the contents (either children or a value): + http://stackoverflow.com/questions/21984867/ + --> <xsl:template match="a[@data-expanded-url]"> - <xsl:copy-of select="php:function('Tweeper::generateEnclosure', string(./@data-expanded-url))"/> + <!-- Prepend and append a white space for aestethic reasons --> + <xsl:text> </xsl:text> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="@data-expanded-url"/> + </xsl:attribute> + <!-- Also strip and … --> + <xsl:value-of select="translate(., ' …', '')"/> + </a> + <xsl:text> </xsl:text> + </xsl:template> + + <!-- + These are links to pic.twitter.com, use the direct link for those + too instead of the t.co redirections. + --> + <xsl:template match="a[@data-pre-embedded='true']"> + <!-- Prepend and append a white space for aestethic reasons --> + <xsl:text> </xsl:text> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="concat('https://', .)"/> + </xsl:attribute> + <xsl:value-of select="concat('https://', .)"/> + </a> + <xsl:text> </xsl:text> + </xsl:template> + + <!-- Present images in a more convenient way --> + <xsl:template match="div[@data-image-url]"> + <a> + <xsl:attribute name="href"> + <xsl:value-of select="concat(@data-image-url, ':orig')"/> + </xsl:attribute> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="@data-image-url"/> + </xsl:attribute> + </img> + </a> + </xsl:template> + + <!-- Don't repeat background in embedded media content --> + <xsl:template match="div[contains(@class, 'PlayableMedia-player')]"> + <xsl:copy> + <xsl:apply-templates select="@*"/> + <xsl:attribute name="style"> + <xsl:value-of select="concat(@style, '; background-repeat: no-repeat')"/> + </xsl:attribute> + <xsl:apply-templates select="node()"/> + </xsl:copy> + </xsl:template> + + <xsl:template match="a[@data-expanded-url]" mode="enclosure"> + <xsl:copy-of select="php:functionString('Tweeper::generateEnclosure', ./@data-expanded-url)"/> + </xsl:template> + + <xsl:template match="div[@data-image-url]" mode="enclosure"> + <xsl:copy-of select="php:functionString('Tweeper::generateEnclosure', concat(./@data-image-url, ':orig'))"/> </xsl:template> <xsl:variable name="screen-name" select="//div[@class='user-actions btn-group not-following ']/@data-screen-name"/> @@ -41,10 +116,16 @@ <xsl:template match="//li[@data-item-id and @data-item-type='tweet']"> <xsl:variable name="user-name" select=".//div[contains(@class, 'js-stream-tweet')]/@data-screen-name"/> <xsl:variable name="item-content" select=".//p[contains(@class, 'js-tweet-text')]"/> + <xsl:variable name="item-media" select=".//div[contains(@class, 'AdaptiveMedia-container')]"/> <xsl:variable name="item-permalink" select="concat($BaseURL, .//div[@data-permalink-path]/@data-permalink-path)"/> + + <xsl:variable name="item-has-video" select="$item-media//*[contains(@class, 'PlayableMedia--video')]"/> <item> <title> <xsl:value-of select="concat($user-name, ': ')"/> + <xsl:if test="$item-has-video"> + <xsl:text>(Video) </xsl:text> + </xsl:if> <!-- Prepend a space in front of the URLs which are not preceded by an open parenthesis, for aestethic reasons. @@ -52,7 +133,7 @@ --> <xsl:variable name="processed-title" - select="php:function('preg_replace', '@((?<!\()(?:http[s]?://|pic.twitter.com))@', ' \1', string($item-content))"/> + select="php:functionString('preg_replace', '@((?<!\()(?:http[s]?://|pic.twitter.com))@', ' \1', $item-content)"/> <!-- Also strip and … --> <xsl:value-of select="normalize-space(translate($processed-title, ' …', ''))"/> </title> @@ -69,11 +150,16 @@ <description> <xsl:value-of select="concat($user-name, ': ')"/> <xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text> - <xsl:copy-of select="$item-content/node()"/> + <xsl:if test="$item-has-video"> + <xsl:text>(Video) </xsl:text> + </xsl:if> + <xsl:apply-templates select="$item-content/node()"/> + <xsl:apply-templates select="$item-media/node()"/> <xsl:text disable-output-escaping="yes">]]></xsl:text> </description> <xsl:if test="$generate-enclosure = 1"> - <xsl:apply-templates select="$item-content//a[@data-expanded-url]"/> + <xsl:apply-templates select="$item-content//a[@data-expanded-url]" mode="enclosure"/> + <xsl:apply-templates select="$item-media//div[@data-image-url]" mode="enclosure"/> </xsl:if> </item> </xsl:template>