-sub code_footer ($) {
- my ($env) = @_;
- my $u = prurl($env, $CODE_URL);
- qq(AGPL code for this site: git clone <a\nhref="$u">$u</a>)
+sub inboxes { () } # TODO
+
+sub coderepos ($) {
+ my ($ctx) = @_;
+ $ctx->{ibx} // return inboxes($ctx);
+ my $cr = $ctx->{ibx}->{coderepo} // return ();
+ my $cfg = $ctx->{www}->{pi_cfg};
+ my $upfx = ($ctx->{-upfx} // ''). '../';
+ my $pfx = $ctx->{base_url} //= $ctx->base_url;
+ my $up = $upfx =~ tr!/!/!;
+ $pfx =~ s!/[^/]+\z!/! for (1..$up);
+ my @ret = ('<a id=code>' .
+ 'Code repositories for project(s) associated with this '.
+ $ctx->{ibx}->thing_type . "\n");
+ for my $cr_name (@$cr) {
+ my $urls = $cfg->get_all("coderepo.$cr_name.cgiturl");
+ if ($urls) {
+ for (@$urls) {
+ my $u = m!\A(?:[a-z\+]+:)?//! ? $_ : $pfx.$_;
+ $u = ascii_html(prurl($ctx->{env}, $u));
+ $ret[0] .= qq(\n\t<a\nhref="$u">$u</a>);
+ }
+ } else {
+ $ret[0] .= qq[\n\t$cr_name.git (no URL configured)];
+ }
+ }
+ @ret; # may be empty, this sub is called as an arg for join()