X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=Project.pm;h=13a8d9546ffefe2f08f6f753176ba26dbb4d09aa;hb=aba10a49c1e0d87b131388fe7b7342bf87a6a539;hp=3599cac239e869186c9ad32152173fdca6073f9c;hpb=afce39eaa94318a00cd15ae615170c892e886dda;p=MyWeb.git diff --git a/Project.pm b/Project.pm index 3599cac..13a8d95 100644 --- a/Project.pm +++ b/Project.pm @@ -30,11 +30,15 @@ our @EXPORT=qw(); our @ISA=qw(My::Web Exporter); +sub ENTRIES { return top_dir_disk()."/project/CVS/Entries"; } +sub ENTRIES_LOG { return top_dir_disk()."/project/CVS/Entries.Log"; } + + sub print_project ($) { my($class,$ListItem)=@_; - print "

".$ListItem->{"name"}."

\n"; + print "

".$W->{"title"}."

\n"; print $ListItem->{"description"}; print "
\n"; my @table=( @@ -51,7 +55,8 @@ my($class,$ListItem)=@_; {"key"=>"maintenance","text"=>"State","format"=>sub ($) { my %known=( "active"=>"Ready to use. Project is now actively developed.", - "ready"=>"Ready to use although no longer being actively developed.", + "ready"=>"Ready to use. Maintained.", + "pending"=>"Patch is ready to be applied to the mainstream.", "dead"=>"Dead code, no longer supported.", "merge"=>"Functions belong to existing other project.", "obsolete"=>"Obsoleted.", @@ -77,14 +82,14 @@ my($class,$ListItem)=@_; return "Download".$_[0]; }, "format"=>sub ($) { - return a_href($_[0],CGI::escapeHTML($_[0])); + return a_href($_[0],CGI::escapeHTML(File::Basename::basename($_[0]))); }}, {"key"=>qr(^link\b),"text"=>sub ($) { $_[0]=~s/^link-//; return $_[0]; }, "format"=>sub ($) { - return a_href($_[0],CGI::escapeHTML($_[0])); + return($_[0]=~/^qr(^cvs\b),"text"=>sub ($) { $_[0]=~s/^cvs//; @@ -108,10 +113,10 @@ my($class,$ListItem)=@_; ["Download CVS snapshot" , $W->{"project_viewcvs"}.$val."/".File::Basename::basename($val).".tar.gz?tarball=1" .(!$branch ? "" : '&only_with_tag='.$branch)], - ["CVS ChangeLog" ,$W->{"top_dir"}."/project/ChangeLog.txt.pl?cvs=$val"]))); + ["CVS ChangeLog" ,"/project/ChangeLog.txt.pl?cvs=$val"]))); }}, {"key"=>"ownership","text"=>"Ownership"}, - {"key"=>"sponsorship","text"=>"Sponsoring Company"}, + {"key"=>"sponsorship","text"=>"Sponsorship"}, {"key"=>"language","text"=>"Programming language","format"=>sub ($) { return a_href("http://java.sun.com/",CGI::escapeHTML($_[0])) if $_[0]=~/^Java\b/; @@ -176,18 +181,110 @@ sub init_project ($%) my($class,%args)=@_; my $ListItem={ project_arr_to_hash(@{$args{"ListItem"}}) }; - my $name=$ListItem->{"name"}; - $name=~s#]*>([^<]*)#$1#g; my $W=$class->init( - "title"=>$name, + "title"=>$ListItem->{"name"}.": ".$ListItem->{"summary"}, %args, "head_css"=>($args{"head_css"} || "")." table.print_project td { vertical-align: top; } ", + "WebConfig::heading_novskip"=>1, ); $class->heading(); + print $class->platforms($ListItem->{"platform"}); $class->print_project({ %$ListItem }); return $W; } +sub item_hash_read () +{ + my %dirs; + for my $ENTRIES (ENTRIES(),ENTRIES_LOG()) { + local *E; + next if !open E,$ENTRIES; + while () { + chomp; + do { $dirs{$1}=1; next; } if m#^(?:A )?D/([^/]*)/#; + next if m#^/([^/]*)/# ; + next if /^D$/; + warn "File $ENTRIES contains invalid line \"$_\": $!"; + } + close E; + } + + my %item; + for my $dir (keys(%dirs)) { + Wrequire "project::${dir}::ListItem"; + my $item=eval('\@project::'.$dir.'::ListItem::ListItem'); + do { warn "Broken project/$dir/ListItem.pm"; next; } if !defined $item; + $item{$dir}={ My::Project::project_arr_to_hash(@$item) }; + } + return %item; +} + +our @platforms=( + "unixuser"=>"GNU/Linux", + "unixdevel"=>"GNU/Linux Development", + "web"=>"Web", + "amiga"=>"Amiga", + "w32"=>"MS-Windows", + "dos"=>"MS-DOS", + "patch"=>"Patches", + ); + +sub views ($$) +{ +my($class,$view_selected)=@_; + + my $view=sub ($$) + { + my($current,$href,$content)=@_; + + return a_href($href,$content) if $current ne $view_selected; + return "".$content." (current)"; + }; + + return <<"HERE"; +

Project List of @{[ a_href 'http://www.jankratochvil.net/','Jan Kratochvil' ]}

+ +
    +
  • @{[ &{$view}('Detailed' ,'/project/','Detailed project listing per platform') ]}
  • +
  • @{[ &{$view}('BriefPlatform','/project/List.html.pl?platform=platform', + 'Brief project listing per platform') ]}
  • +
  • @{[ &{$view}('BriefUnified' ,'/project/List.html.pl', + 'Unified brief project listing') ]}
  • +
+@{[ vskip "1ex" ]} +HERE +} + +sub platforms ($;$) +{ +my($class,$platform_selected)=@_; + + my $r=""; + $r.=''."\n"; + $r.=''; + $r.=''."\n"; + $r.='
Projects:  '; + $r.=''."\n"; + $r.=''."\n"; + my @platforms=@platforms; + while (@platforms) { + my $platform_sym =shift @platforms; + my $platform_name=shift @platforms; + my $chosen=($platform_selected && $platform_selected eq $platform_sym); + $r.='\n"; + } + $r.=''."\n"; + $r.='
'; + $r.=a_href((!$platform_selected ? "" : "/project/").'#'.$platform_sym,$platform_name, + "attr"=>($chosen + ? 'style="text-decoration: underline; font-weight: bold;"' + : 'style="text-decoration: inherit; /* revoke underline */"')); + $r.="
'."\n"; + $r.='
'."\n"; + $r.=vskip "1ex"; + $r; +} + 1;