rss_converter_twitter.com.xsl: use direct URLs for links, when possible
authorAntonio Ospite <ao2@ao2.it>
Fri, 20 May 2016 09:10:43 +0000 (11:10 +0200)
committerAntonio Ospite <ao2@ao2.it>
Fri, 20 May 2016 13:03:40 +0000 (15:03 +0200)
Replace the t.co URLs with the actual location the link was originally
meant to point to.

rss_converter_twitter.com.xsl

index 1903607..7367dd8 100644 (file)
         <xsl:text>https://twitter.com</xsl:text>
     </xsl:variable>
 
         <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]">
+        <!-- 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 &nbsp; and &hellip; -->
+            <xsl:value-of select="translate(., '&#xA0;&#x2026;', '')"/>
+        </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>
+
     <xsl:template match="a[@data-expanded-url]" mode="enclosure">
         <xsl:copy-of select="php:function('Tweeper::generateEnclosure', string(./@data-expanded-url))"/>
     </xsl:template>
     <xsl:template match="a[@data-expanded-url]" mode="enclosure">
         <xsl:copy-of select="php:function('Tweeper::generateEnclosure', string(./@data-expanded-url))"/>
     </xsl:template>
             <description>
                 <xsl:value-of select="concat($user-name, ': ')"/>
                 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
             <description>
                 <xsl:value-of select="concat($user-name, ': ')"/>
                 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
-                <xsl:copy-of select="$item-content/node()"/>
+                <xsl:apply-templates select="$item-content/node()"/>
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
             <xsl:if test="$generate-enclosure = 1">
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
             <xsl:if test="$generate-enclosure = 1">