Code

Merge branch 'pb/gitweb-tagcloud' into pb/gitweb
authorShawn O. Pearce <spearce@spearce.org>
Fri, 3 Oct 2008 14:41:25 +0000 (07:41 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 3 Oct 2008 14:41:25 +0000 (07:41 -0700)
* pb/gitweb-tagcloud:
  gitweb: Support for simple project search form
  gitweb: Make the by_tag filter delve in forks as well
  gitweb: Support for tag clouds
  ... (+ many updates from master) ...

Conflicts:
gitweb/gitweb.perl

1  2 
gitweb/gitweb.perl

index 453cbac7d8da0411e40852b84be69d727f493817,b46af77da0bd61aed5eb7977fecb03d4034d4911..11168006cffe9bd2f6c8c27bd1d034c41667e39a
@@@ -276,25 -283,23 +283,43 @@@ our %feature = 
                'override' => 0,
                'default' => [0]},
  
 +      # Insert custom links to the action bar of all project pages.
 +      # This enables you mainly to link to third-party scripts integrating
 +      # into gitweb; e.g. git-browser for graphical history representation
 +      # or custom web-based repository administration interface.
 +
 +      # The 'default' value consists of a list of triplets in the form
 +      # (label, link, position) where position is the label after which
 +      # to inster the link and link is a format string where %n expands
 +      # to the project name, %f to the project path within the filesystem,
 +      # %h to the current hash (h gitweb parameter) and %b to the current
 +      # hash base (hb gitweb parameter).
 +
 +      # To enable system wide have in $GITWEB_CONFIG e.g.
 +      # $feature{'actions'}{'default'} = [('graphiclog',
 +      #       '/git-browser/by-commit.html?r=%n', 'summary')];
 +      # Project specific override is not supported.
 +      'actions' => {
 +              'override' => 0,
 +              'default' => []},
++
+       # Allow gitweb scan project content tags described in ctags/
+       # of project repository, and display the popular Web 2.0-ish
+       # "tag cloud" near the project list. Note that this is something
+       # COMPLETELY different from the normal Git tags.
+       # gitweb by itself can show existing tags, but it does not handle
+       # tagging itself; you need an external application for that.
+       # For an example script, check Girocco's cgi/tagproj.cgi.
+       # You may want to install the HTML::TagCloud Perl module to get
+       # a pretty tag cloud instead of just a list of tags.
+       # To enable system wide have in $GITWEB_CONFIG
+       # $feature{'ctags'}{'default'} = ['path_to_tag_script'];
+       # Project specific override is not supported.
+       'ctags' => {
+               'override' => 0,
+               'default' => [0]},
  );
  
  sub gitweb_check_feature {
@@@ -3654,7 -3713,16 +3740,8 @@@ sub print_sort_th 
        }
  }
  
 -sub print_sort_th_str {
 -      print_sort_th(1, @_);
 -}
 -
 -sub print_sort_th_num {
 -      print_sort_th(0, @_);
 -}
 -
  sub git_project_list_body {
+       # actually uses global variable $project
        my ($projlist, $order, $from, $to, $extra, $no_header) = @_;
  
        my ($check_forks) = gitweb_check_feature('forks');
        $from = 0 unless defined $from;
        $to = $#projects if (!defined $to || $#projects < $to);
  
 +      my %order_info = (
 +              project => { key => 'path', type => 'str' },
 +              descr => { key => 'descr_long', type => 'str' },
 +              owner => { key => 'owner', type => 'str' },
 +              age => { key => 'age', type => 'num' }
 +      );
 +      my $oi = $order_info{$order};
 +      if ($oi->{'type'} eq 'str') {
 +              @projects = sort {$a->{$oi->{'key'}} cmp $b->{$oi->{'key'}}} @projects;
 +      } else {
 +              @projects = sort {$a->{$oi->{'key'}} <=> $b->{$oi->{'key'}}} @projects;
 +      }
 +
+       my $show_ctags = gitweb_check_feature('ctags');
+       if ($show_ctags) {
+               my %ctags;
+               foreach my $p (@projects) {
+                       foreach my $ct (keys %{$p->{'ctags'}}) {
+                               $ctags{$ct} += $p->{'ctags'}->{$ct};
+                       }
+               }
+               my $cloud = git_populate_project_tagcloud(\%ctags);
+               print git_show_project_tagcloud($cloud, 64);
+       }
        print "<table class=\"project_list\">\n";
        unless ($no_header) {
                print "<tr>\n";