diff --git a/Issue.pm b/Issue.pm
index 3242fa6..3c35a30 100644
--- a/Issue.pm
+++ b/Issue.pm
@@ -45,6 +45,7 @@ sub dbListing {
my %o = (
results => 100,
page => 1,
+ @_
);
$o{reverse} = 1 if !$o{sort};
@@ -122,6 +123,18 @@ sub htmlListing {
}
+sub _escape_url {
+ my $str = shift;
+ my $r = '';
+ my $last = 0;
+ while($str =~ m{((?:https?|ftp)://[^ ><"\n\s]+[\d\w=/-])}g) {
+ $r .= sprintf '%s%2$s', html_escape(substr $str, $last, (pos($str)-length($1))-$last), html_escape($1);
+ $last = pos $str;
+ }
+ return $r.html_escape(substr $str, $last);
+}
+
+
sub htmlItem {
my($s, $d) = @_;
my $last = $d->[$#$d];
@@ -149,8 +162,7 @@ sub htmlItem {
dd sprintf '"%s" to "%s"', $d->[$num-1]{closed}?'yes':'no', $m->{closed}?'yes':'no';
}
end;
- # TODO: link formatting and some way to link to other issues
- p; lit html_escape $m->{message}; end;
+ p; lit _escape_url $m->{message}; end;
end;
}
end;
diff --git a/dat/tuwf b/dat/tuwf
index 7559624..ff62839 100644
--- a/dat/tuwf
+++ b/dat/tuwf
@@ -61,4 +61,6 @@ TUWF is also available on a git repository at L.
=item * L
+=item * L<333networks|http://333networks.com/>
+
=back
diff --git a/index.cgi b/index.cgi
index 88a148e..229430f 100755
--- a/index.cgi
+++ b/index.cgi
@@ -12,6 +12,7 @@ BEGIN { ($ROOT = abs_path $0) =~ s{index\.cgi$}{}; }
my @changes = (
+ [ '2012-03-24', '/ncdu/issue', 'Moved issue tracker from sourceforge to this site' ],
[ '2012-03-17', '/ncdc/issue', 'Wrote a small issue tracker for ncdc' ],
[ '2012-03-14', '/ncdc', 'ncdc 1.9 released.' ],
[ '2012-02-15', '/doc/commvis', 'Added an article on my new communication system.' ],
@@ -75,10 +76,10 @@ TUWF::register(
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,
- qr{(ncdc)/issue} => \&issue_list,
- qr{(ncdc)/issue/post} => \&issue_post,
- qr{(ncdc)/issue/new} => \&issue_new,
- qr{(ncdc)/issue/([1-9][0-9]*)} => \&issue_item,
+ qr{(ncdc|ncdu)/issue} => \&issue_list,
+ qr{(ncdc|ncdu)/issue/post} => \&issue_post,
+ qr{(ncdc|ncdu)/issue/new} => \&issue_new,
+ qr{(ncdc|ncdu)/issue/([1-9][0-9]*)} => \&issue_item,
);
TUWF::set(
@@ -213,7 +214,7 @@ sub _issue_init {
sub issue_list {
my($s, $p) = @_;
my $is = _issue_init(@_);
- $s->htmlHeader(title => 'Ncdc Issue tracker', page => $p, sec => 'issue');
+ $s->htmlHeader(title => "\u$p Issue tracker", page => $p, sec => 'issue');
br; a href => "/$p/issue/new", 'Report new issue'; br; br;
$is->htmlListing((scalar $is->dbListing()), sub { "/$p/issue/".shift });
br; a href => "/$p/issue/new", 'Report new issue'; br; br;
@@ -224,7 +225,7 @@ sub issue_list {
sub issue_new {
my($s, $p) = @_;
my $is = _issue_init(@_);
- $s->htmlHeader(title => 'Ncdc: Report new issue', page => $p, sec => 'issue');
+ $s->htmlHeader(title => "\u$p: Report new issue", page => $p, sec => 'issue');
br; a href => "/$p/issue", 'Back to the issue index'; br; br;
$is->htmlForm(undef, "/$p/issue/post");
$s->htmlFooter;
@@ -255,7 +256,7 @@ sub issue_item {
my $item = $is->dbItem($i);
return $s->resNotFound if !@$item;
my $last = $item->[$#$item];
- $s->htmlHeader(title => 'Ncdc: '.$last->{summary}, page => $p, sec => 'issue');
+ $s->htmlHeader(title => "\u$p: $last->{summary}", page => $p, sec => 'issue');
br; a href => "/$p/issue", 'Back to the issue index'; br; br;
$is->htmlItem($item);
$is->htmlForm($last, "/$p/issue/post") if !$last->{closed};
@@ -403,7 +404,7 @@ sub htmlMenu {
$m->('/ncdu/man', 'Manual', $o{sec} eq 'man');
$m->('/ncdu/changes', 'Changelog', $o{sec} eq 'changes');
$m->('/ncdu/scr', 'Screenshots', $o{sec} eq 'scr');
- $m->('http://sourceforge.net/tracker/?group_id=200175', 'Bug tracker ');
+ $m->('/ncdu/issue', 'Issue tracker', $o{sec} eq 'issue');
});
$m->('/ncdc', 'Ncdc', $o{page} eq 'ncdc', sub {
$m->('/ncdc', 'Info', !$o{sec});