Added EOF-footer, atom feed for site changes and fixed paypal XHTML
This commit is contained in:
parent
fa299b0fd9
commit
77600d79c5
3 changed files with 104 additions and 84 deletions
112
index.cgi
112
index.cgi
|
|
@ -3,13 +3,53 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use TUWF ':html';
|
||||
use TUWF ':html', ':xml';
|
||||
use POSIX 'strftime';
|
||||
|
||||
use Cwd 'abs_path';
|
||||
our $ROOT;
|
||||
BEGIN { ($ROOT = abs_path $0) =~ s{index\.cgi$}{}; }
|
||||
|
||||
|
||||
my @changes = (
|
||||
[ '2012-02-15', '/doc/commvis', 'Added an article on my new communication system.' ],
|
||||
[ '2012-02-13', '/ncdc', 'ncdc 1.8 released.' ],
|
||||
[ '2012-01-19', '/tuwf', 'TUWF 0.2 released.' ],
|
||||
[ '2012-01-17', undef, 'Complete site redesign.' ],
|
||||
[ '2011-12-30', '/ncdc/', 'ncdc 1.7 released!' ],
|
||||
[ '2011-12-07', '/ncdc/', 'ncdc 1.6 released!' ],
|
||||
[ '2011-11-26', '/doc', 'Added article section and the article on SQLite.' ],
|
||||
[ '2011-11-03', '/ncdu', 'ncdu 1.8 released!' ],
|
||||
[ '2011-11-03', '/ncdc', 'ncdc 1.5 released!' ],
|
||||
[ '2011-10-26', '/ncdc', 'ncdc 1.4 released!' ],
|
||||
[ '2011-10-19', undef, 'PGP-signed all releases of ncdu, ncdc and TUWF.' ],
|
||||
[ '2011-10-14', '/ncdc', 'ncdc 1.3 released!' ],
|
||||
[ '2011-09-25', '/ncdc', 'ncdc 1.1 released - follwed by a 1.2 quickfix.' ],
|
||||
[ '2011-09-16', '/ncdc', 'ncdc 1.0 released!' ],
|
||||
[ '2011-09-15', '/ncdc/scr', 'Added some screenshots for ncdu.' ],
|
||||
[ '2011-09-03', '/ncdc', 'ncdc 0.9 released!' ],
|
||||
[ '2011-08-26', '/ncdc', 'ncdc 0.8 released!' ],
|
||||
[ '2011-08-17', '/ncdc', 'ncdc 0.7 released!' ],
|
||||
[ '2011-08-08', '/ncdc', 'ncdc 0.6 released & user guide updated' ],
|
||||
[ '2011-08-02', '/ncdc', 'ncdc 0.5 released!' ],
|
||||
[ '2011-07-23', '/ncdc', 'ncdc 0.4 released!' ],
|
||||
[ '2011-07-15', '/ncdc', 'ncdc 0.3 released!' ],
|
||||
[ '2011-06-27', '/ncdc', 'ncdc 0.2 released!' ],
|
||||
[ '2011-06-20', '/ncdc', 'ncdc 0.1 released! And wrote a user guide for it.' ],
|
||||
[ '2011-06-11', '/dump/nccolour', 'Added NCurses colour experiment' ],
|
||||
[ '2011-06-03', '/ncdc', 'Added my latest project: ncdc' ],
|
||||
[ '2011-02-07', '/tuwf', 'TUWF 0.1 released and now also available on CPAN' ],
|
||||
[ '2011-01-27', '/tuwf', 'Documented and uploaded one of my older projects: TUWF' ],
|
||||
[ '2011-01-09', '/dump', 'Added my json.mll OCaml library to code dump' ],
|
||||
[ '2010-08-13', '/ncdu', 'ncdu 1.7 released!' ],
|
||||
[ '2009-12-22', '/dump', 'Added vinfo.c script to code dump' ],
|
||||
[ '2009-10-23', '/ncdu', 'ncdu 1.6 released!' ],
|
||||
[ '2009-09-21', undef, 'Tiny CSS fix to make this site look good in certain configurations.' ],
|
||||
[ '2009-05-02', '/ncdu', 'ncdu 1.5 released!' ],
|
||||
[ '2009-04-30', undef, 'Site redesign and reorganisation.' ],
|
||||
);
|
||||
|
||||
|
||||
TUWF::register(
|
||||
qr{} => sub { podpage(shift, 'home', '', '', "Yorhel's Projects") },
|
||||
qr{ncdu} => sub { podpage(shift, 'ncdu', 'ncdu', '', 'NCurses Disk Usage') },
|
||||
|
|
@ -32,6 +72,7 @@ TUWF::register(
|
|||
qr{dump/awshrink} => sub { podpage(shift, 'dump-awshrink', 'dump', 'awshrink', 'AWStats Data File Shrinker') },
|
||||
qr{dump/grenamr} => sub { podpage(shift, 'dump-grenamr', 'dump', 'grenamr', 'GTK+ Mass File Renamer') },
|
||||
qr{dump/nccolour} => sub { podpage(shift, 'dump-nccolour', 'dump', 'nccolour', 'Colours in NCurses') },
|
||||
qr{feed\.atom} => \&atom,
|
||||
);
|
||||
|
||||
TUWF::set(
|
||||
|
|
@ -93,6 +134,37 @@ sub tuwfmanual {
|
|||
}
|
||||
|
||||
|
||||
sub atom {
|
||||
my $s = shift;
|
||||
my $t = (stat("$ROOT/index.cgi"))[9];
|
||||
$s->resHeader('Last-Modified' => strftime '%a, %d %b %Y %H:%M:%S GMT', gmtime $t);
|
||||
$s->resHeader('Content-Type' => 'application/atom+xml');
|
||||
xml;
|
||||
tag feed => xmlns => 'http://www.w3.org/2005/Atom', 'xml:lang' => 'en', 'xml:base' => 'http://dev.yorhel.nl/';
|
||||
tag title => "Yorhel's Projects";
|
||||
tag updated => strftime('%Y-%m-%dT%H:%M:%SZ', gmtime $t);
|
||||
tag id => "http://dev.yorhel.nl/feed.atom";
|
||||
tag link => rel => 'self', type => 'application/atom+xml', href => "http://dev.yorhel.nl/feed.atom", undef;
|
||||
tag link => rel => 'alternate', type => 'text/html', href => 'http://dev.yorhel.nl/', undef;
|
||||
|
||||
for(@changes) {
|
||||
tag 'entry';
|
||||
tag id => 'http://dev.yorhel.nl'.($_->[1]||'/').'#'.$_->[0];
|
||||
tag title => $_->[2];
|
||||
tag updated => $_->[0].'T12:00:00Z';
|
||||
tag published => $_->[0].'T12:00:00Z';
|
||||
tag 'author';
|
||||
tag name => 'Yoran Heling';
|
||||
tag uri => 'http://dev.yorhel.nl/';
|
||||
tag email => 'projects@yorhel.nl';
|
||||
end;
|
||||
tag link => rel => 'alternate', type => 'text/html', href => 'http://dev.yorhel.nl'.($_->[1]||'/'), undef;
|
||||
end 'entry';
|
||||
}
|
||||
end 'feed';
|
||||
}
|
||||
|
||||
|
||||
sub notfound {
|
||||
my $s = shift;
|
||||
my $u = lc $s->reqPath;
|
||||
|
|
@ -125,6 +197,7 @@ use TUWF ':html';
|
|||
# [dllink $file $title]
|
||||
# [img $class $file $alt]
|
||||
# [html]..É
|
||||
# [yh-changes]
|
||||
sub htmlPOD {
|
||||
my($s, $file, $toc) = @_;
|
||||
require Pod::Simple::HTML;
|
||||
|
|
@ -161,6 +234,7 @@ sub htmlPOD {
|
|||
$html =~ s/\[dllink ([^ ]+)(?: ([^>]+))?\]/$s->genDLLink($1, $2)/eg;
|
||||
$html =~ s/\[img ([^ ]+) ([^ ]+) ([^\]]*)\]/<img src="\/img\/$2" class="$1" alt="$3" \/>/g;
|
||||
$html =~ s{\[html\](.*)É}{(my $h = $1) =~ s/\>/>/g; $h =~ s/\</</g; $h =~ s/\&/\&/g; $h =~ s/\"/"/g; $h}egs;
|
||||
$html =~ s/\[yh-changes\]/$s->genChanges()/e;
|
||||
lit $html;
|
||||
}
|
||||
|
||||
|
|
@ -174,6 +248,18 @@ sub genDLLink {
|
|||
}
|
||||
|
||||
|
||||
# Generate the changelog HTML for this website
|
||||
sub genChanges {
|
||||
return join "\n", map {
|
||||
"<code>$_->[0] </code>"
|
||||
.($_->[1]?qq{<a href="$_->[1]">}:'')
|
||||
.TUWF::XML::html_escape($_->[2])
|
||||
.($_->[1]?'</a>':'')
|
||||
.'<br />';
|
||||
} @changes;
|
||||
}
|
||||
|
||||
|
||||
sub htmlHeader {
|
||||
my $s = shift;
|
||||
my %o = (page => '', sec => '', sec2 => '', @_ );
|
||||
|
|
@ -182,6 +268,7 @@ sub htmlHeader {
|
|||
style type => 'text/css';
|
||||
$s->printCSS;
|
||||
end;
|
||||
Link rel => 'alternate', type => 'application/atom+xml', href => '/feed.atom', title => 'Site updates';
|
||||
title $o{title};
|
||||
end;
|
||||
body;
|
||||
|
|
@ -197,12 +284,12 @@ sub htmlHeader {
|
|||
txt ' - '; a href => 'http://pgp.mit.edu:11371/pks/lookup?search=0x8c2739fa', 'pgp';
|
||||
br;br;
|
||||
lit q|
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----">
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||
<img alt="" border="0" src="https://www.paypalobjects.com/nl_NL/i/scr/pixel.gif" width="1" height="1">
|
||||
</form>|;
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><fieldset style="border:0">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----" />
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" name="submit" alt="PayPal - The safer, easier way to pay online!" style="border: 0" />
|
||||
<img alt="" src="https://www.paypalobjects.com/nl_NL/i/scr/pixel.gif" style="width:1px; height:1px; border:0" />
|
||||
</fieldset></form>|;
|
||||
end;
|
||||
end 'div';
|
||||
div id => 'main';
|
||||
|
|
@ -212,7 +299,9 @@ sub htmlHeader {
|
|||
|
||||
sub htmlFooter {
|
||||
end 'div'; # main
|
||||
div id => 'anotherhack', ' ';
|
||||
div id => 'footer';
|
||||
p 'end-of-file';
|
||||
end;
|
||||
end 'div'; # body
|
||||
end 'body';
|
||||
end 'html';
|
||||
|
|
@ -290,10 +379,11 @@ sub printCSS {
|
|||
* { margin: 0; padding: 0; font: 15px 'Buenard',serif; color: #222 }
|
||||
#body { text-align: left; width: 800px; margin: 0 auto; background: #fff; border-left: 1px solid #aaa; border-right: 1px solid #aaa; min-height: 100% }
|
||||
#uglyhack { height: 30px }
|
||||
#anotherhack { clear: left }
|
||||
#main, #left { float: left; border-top: 0px dashed #aaa, margin-top: 50px }
|
||||
#left { width: 130px; border-right: 1px dashed #aaa; padding: 20px 10px }
|
||||
#main { width: 609px; padding: 12px 20px }
|
||||
#left { width: 130px; border-right: 1px dashed #aaa; padding: 20px 10px; margin-bottom: 30px }
|
||||
#main { width: 609px; padding: 12px 20px 30px 20px }
|
||||
#footer { clear: left; width: 150px; margin: 0 0 0 324px; border-top: 1px dashed #aaa; height: 20px; text-align: center }
|
||||
#footer p { position: relative; top: -10px; padding: 0; background: #fff; display: inline; color: #aaa }
|
||||
#left h1 { font-weight: bold; text-align: center; font-size: 15px }
|
||||
#left li { margin: 20px 0 0 10px; list-style-type: none }
|
||||
#left li a { text-decoration: none; display: block; width: 120px; border-bottom: 1px solid #fff }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue