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});