add XSL stylesheet to generated feeds

This commit is contained in:
Andrew Dolgov 2007-08-10 06:22:04 +01:00
parent f56e308090
commit a5472764c9
8 changed files with 336 additions and 2 deletions

View File

@ -2722,9 +2722,11 @@
$feed_site_url = $qfh_ret[2]; $feed_site_url = $qfh_ret[2];
$last_error = $qfh_ret[3]; $last_error = $qfh_ret[3];
# if (!$feed_site_url) $feed_site_url = "http://localhost/"; // if (!$feed_site_url) $feed_site_url = "http://localhost/";
print "<rss version=\"2.0\"> print "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"rss.xsl\"?>
<rss version=\"2.0\">
<channel> <channel>
<title>$feed_title</title> <title>$feed_title</title>
<link>$feed_site_url</link> <link>$feed_site_url</link>

BIN
images/active_tab_new.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

BIN
images/feed-icon-64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="155.00000pt"
height="25.000000pt"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45"
sodipodi:docbase="/home/fox/public_html/testbox/tt-rss/images"
sodipodi:docname="ttrss_logo_blackred.svg"
inkscape:export-filename="/home/fox/public_html/testbox/tt-rss/images/ttrss_logo_blackred.png"
inkscape:export-xdpi="120.76"
inkscape:export-ydpi="120.76"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:modified="TRUE">
<defs
id="defs4">
<linearGradient
id="linearGradient3112">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3114" />
<stop
style="stop-color:#d6d6d6;stop-opacity:1;"
offset="1"
id="stop3116" />
</linearGradient>
<linearGradient
id="linearGradient2800">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2802" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2804" />
</linearGradient>
<linearGradient
id="linearGradient2782">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2784" />
<stop
style="stop-color:#f6b5b5;stop-opacity:1;"
offset="1"
id="stop2786" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3112"
id="linearGradient3118"
x1="50"
y1="12.985595"
x2="50"
y2="31.920942"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-0.474438,0.321428)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2782"
id="linearGradient3124"
gradientUnits="userSpaceOnUse"
x1="50"
y1="12.985595"
x2="50"
y2="31.920942"
gradientTransform="translate(139.6953,0.37974)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="109.86875"
inkscape:cy="3.8105931"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1600"
inkscape:window-height="1125"
inkscape:window-x="0"
inkscape:window-y="25"
showguides="true"
inkscape:guide-bbox="true" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:url(#linearGradient3118);fill-opacity:1;stroke:#676767;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Verdana"
x="3.2755625"
y="24.07143"
id="text1306"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/fox/public_html/testbox/tt-rss-blue/images/ttrss_logo.png"
inkscape:export-xdpi="180.00000"
inkscape:export-ydpi="180.00000"><tspan
sodipodi:role="line"
id="tspan1308"
x="3.2755625"
y="24.07143"
style="fill:url(#linearGradient3118);fill-opacity:1;stroke:#676767;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">tiny tiny</tspan></text>
<text
xml:space="preserve"
style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:url(#linearGradient3124);fill-opacity:1.0;stroke:#ff3d3d;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Verdana"
x="143.44531"
y="24.129744"
id="text3120"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/fox/public_html/testbox/tt-rss-blue/images/ttrss_logo.png"
inkscape:export-xdpi="180.00000"
inkscape:export-ydpi="180.00000"><tspan
sodipodi:role="line"
id="tspan3122"
x="143.44531"
y="24.129744"
style="fill:url(#linearGradient3124);fill-opacity:1.0;stroke:#ff3d3d;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">rss</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

59
rss.xsl Normal file
View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="rss/channel/title"/></title>
<link rel="stylesheet" type="text/css" href="utility.css"/>
<script language="javascript" src="xsl_mop-up.js"></script>
</head>
<body onload="go_decoding()">
<div id="cometestme" style="display:none;">
<xsl:text disable-output-escaping="yes">&amp;amp;</xsl:text>
</div>
<div class="rss">
<img class="feedicon" src="images/feed-icon-64x64.png" alt="feed icon"/>
<h1><xsl:value-of select="rss/channel/title"/></h1>
<p class="description">This is an RSS feed exported from
<a target="_new" class="extlink" href="http://tt-rss.spb.ru">Tiny Tiny RSS</a>.
You must install a news aggregator to subscribe to it.
This feed contains the following items:</p>
<!-- <p class="description"><xsl:value-of
select="rss/channel/description"/></p> -->
<xsl:for-each select="rss/channel/item">
<h2><xsl:value-of select="title"/></h2>
<div><a class="extlink" target="_new"
href="{link}"><xsl:value-of select="link"/></a></div>
<div name="decodeme" class="content">
<xsl:value-of select="description" disable-output-escaping="yes"/>
</div>
<xsl:if test="enclosure">
<p><a href="{enclosure/@url}">Extra...</a></p>
</xsl:if>
<hr/>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View File

@ -76,3 +76,46 @@ h2 {
border-color : black; border-color : black;
border-style : solid; */ border-style : solid; */
} }
div.rss h1 {
border-width : 0px 0px 1px 0px;
border-color : gray;
border-style : dotted;
color : gray;
margin-right : 90px;
}
div.rss h2 {
font-size : 12pt;
margin : 0px;
}
div.rss a.extlink {
color : gray;
border-width : 0px 0px 1px 0px;
border-color : #778899;
border-style : dotted;
font-size : 9pt;
}
div.rss p.description {
color : gray;
font-size : 9pt;
}
div.rss p.content {
margin-left : 2em;
}
div.rss img.feedicon {
float : right;
}
div.rss hr {
border-width : 0px 0px 1px 0px;
border-style : dashed;
border-color : #e0e0e0;
}

86
xsl_mop-up.js Normal file
View File

@ -0,0 +1,86 @@
// -*-coding: latin-1;-*-
// Time-stamp: "2006-05-17 22:06:46 ADT" sburke@cpan.org
// A workaround for XSL-to-XHTML systems that don't
// implement XSL 'disable-output-escaping="yes"'.
//
// sburke@cpan.org, Sean M. Burke.
// - I hereby release this JavaScript code into the public domain.
var is_decoding;
var DEBUG = 0;
function complaining (s) { alert(s); return new Error(s,s); }
if(!( document.getElementById && document.getElementsByName ))
throw complaining("Your browser is too old to render this page properly."
+ " Consider going to getfirefox.com to upgrade.");
function check_decoding () {
var d = document.getElementById('cometestme');
if(!d) {
throw complaining("Can't find an id='cometestme' element?");
} else if(!('textContent' in d)) {
// It's a browser with a halfassed DOM implementation (like IE6)
// that doesn't implement textContent! Assume that if it's that
// dumb, it probably doesn't implement disable-content-encoding.
} else {
var ampy = d.textContent;
if(DEBUG > 1) { alert("Got " + ampy); }
if(ampy == undefined) throw complaining("'cometestme' element has undefined text content?!");
if(ampy == '' ) throw complaining("'cometestme' element has empty text content?!" );
if (ampy == "\x26" ) { is_decoding = true; }
else if (ampy == "\x26amp;" ) { is_decoding = false; }
else { throw complaining('Insane value: "' + ampy + '"!'); }
}
var msg =
(is_decoding == undefined) ? "I can't tell whether the XSL processor supports disable-content-encoding!D"
: is_decoding ? "The XSL processor DOES support disable-content-encoding"
: "The XSL processor does NOT support disable-content-encoding"
;
if(DEBUG) alert(msg);
return msg;
}
function go_decoding () {
check_decoding();
if(is_decoding) {
DEBUG && alert("No work needs doing -- already decoded!");
return;
}
var to_decode = document.getElementsByName('decodeme');
if(!( to_decode && to_decode.length )) {
DEBUG && alert("No work needs doing -- no elements to decode!");
return;
}
if(!( ( "innerHTML" in to_decode[0]) && ( "textContent" in to_decode[0]) ))
throw complaining( "Your JavaScript version doesn't implement DOM " +
"properly enough to show this page correctly. " +
"Consider going to getfirefox.com to upgrade.");
var s;
for(var i = to_decode.length - 1; i >= 0; i--) {
s = to_decode[i].textContent;
if(
s == undefined ||
(s.indexOf('&') == -1 && s.indexOf('<') == -1)
) {
// the null or markupless element needs no reworking
} else {
to_decode[i].innerHTML = s; // that's the magic
}
}
return;
}
//End