From d9563ea5516e8e786debf223e10ec11695aee9d7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 9 Feb 2017 01:37:03 +0000 Subject: repobrowse: shorten internal names We'll still be keeping "repobrowse" for the public API for use with .psgi files, but shortening the name means less typing and we may have command-line tools, too. --- lib/PublicInbox/RepoRoot.pm | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lib/PublicInbox/RepoRoot.pm (limited to 'lib/PublicInbox/RepoRoot.pm') diff --git a/lib/PublicInbox/RepoRoot.pm b/lib/PublicInbox/RepoRoot.pm new file mode 100644 index 00000000..9ab25b97 --- /dev/null +++ b/lib/PublicInbox/RepoRoot.pm @@ -0,0 +1,71 @@ +# Copyright (C) 2016 all contributors +# License: AGPL-3.0+ + +# displays the root '/' where all the projects lie +package PublicInbox::RepoRoot; +use strict; +use warnings; +use base qw(PublicInbox::RepoBase); +use PublicInbox::Hval qw(utf8_html); + +sub call { + my ($self, $rconfig) = @_; + sub { + my ($res) = @_; # PSGI callback + my @h = ('Content-Type', 'text/html; charset=UTF-8'); + my $fh = $res->([200, \@h]); + repobrowse_index($fh, $rconfig); + $fh->close; + } +} + +sub repobrowse_index { + my ($fh, $rconfig) = @_; + my $title = 'repobrowse index'; + $fh->write("$title" . + PublicInbox::Hval::STYLE . + "
$title");
+
+	# preload all groups
+	foreach my $k (sort keys %$rconfig) {
+		$k =~ /\Arepo\.(.+)\.path\z/ or next;
+		my $repo_path = $1;
+		$rconfig->lookup($repo_path); # insert into groups
+	}
+
+	my $groups = $rconfig->{-groups};
+	if (scalar(keys %$groups) > 2) { # default has '-none' + '-hidden'
+		$fh->write("\n\nuncategorized
". + ""); + } else { + $fh->write(""); + } + foreach my $repo_path (sort @{$groups->{-none}}) { + my $r = $rconfig->lookup($repo_path); + my $p = PublicInbox::Hval->utf8($r->{repo}); + my $l = $p->as_html; + $p = $p->as_path; + $fh->write(qq($l) . + " $r->{desc_html}"); + } + + foreach my $group (keys %$groups) { + next if $group =~ /\A-(?:none|hidden)\z/; + my $g = utf8_html($group); + $fh->write("
 
". + "
$g
"); + foreach my $repo_path (sort @{$groups->{$group}}) { + my $r = $rconfig->lookup($repo_path); + my $p = PublicInbox::Hval->utf8($r->{repo}); + my $l = $p->as_html; + $p = $p->as_path; + $fh->write(' ' . + qq($l) . + " $r->{desc_html}"); + } + } + + $fh->write(''); +} + +1; -- cgit v1.2.3-24-ge0c7