X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=Project.pm;h=3d836d8b95098eb82a6804cc062537a29eb43992;hb=279b8f9798fd00c4743ba37148d75ec14510ee4a;hp=20fff63dcba488955e6efd44f2f21a5a4785dedf;hpb=5e3dca58ac33a94d09353d2bc1672386d27c78e5;p=MyWeb.git diff --git a/Project.pm b/Project.pm index 20fff63..3d836d8 100644 --- a/Project.pm +++ b/Project.pm @@ -30,13 +30,19 @@ our @EXPORT=qw(); our @ISA=qw(My::Web Exporter); -sub print_project ($) +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)=@_; +my($class,$ListItem,%args)=@_; - print "

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

\n"; + print "

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

\n"; print $ListItem->{"description"}; print "
\n"; + print $args{"before_project_data"} || ""; + return if $args{"no_project_data"}; my @table=( {"key"=>"summary","text"=>"Summary"}, {"key"=>"license","text"=>"License","format"=>sub ($) { @@ -51,12 +57,14 @@ 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.", "dead"=>"Dead code, no longer supported.", "merge"=>"Functions belong to existing other project.", "obsolete"=>"Obsoleted.", "update"=>"Package needs updating to recent software.", "accepted"=>"This patch got already integrated by the original package maintainer.", + "pending"=>"Patch is ready to be applied to the mainstream.", + "ignored"=>"Patch was ignored. It is not applied in the mainstream.", ""=>"", ); my @r; @@ -66,33 +74,25 @@ my($class,$ListItem)=@_; } return join(" ",@r); }}, + {"key"=>"aminet","text"=>a_href('http://www.aminet.net/','Aminet'),"format"=>sub ($) { + return join(" ", + a_href('http://www.aminet.net/'.$_[0].".lha",$_[0].".lha"), + "(".a_href('http://www.aminet.net/'.$_[0].".readme","readme").")"); + }}, {"key"=>qr(^download\b),"text"=>sub ($) { $_[0]=~s/^download//; $_[0]=~s/^-/ /; return "Download".$_[0]; }, "format"=>sub ($) { - my $r; - if ($_[0]=~m#^[a-z]+://#) { - $r=a_href($_[0],CGI::escapeHTML($_[0])); - } - else { - $r=a_href($_[0],CGI::escapeHTML(File::Basename::basename($_[0]))); - my $size=(stat $_[0])[7]; - die "Cannot stat \"".$_[0]."\": $!" if !defined $size; - if ($size>=1024*1024) { $size=int($size/(1024*1024))." MB"; } - elsif ($size>=1024 ) { $size=int($size/(1024 ))." KB"; } - else { $size=int($size )." B"; } - $r.=" ($size)"; - } - return $r; + 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//; @@ -116,10 +116,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/; @@ -178,24 +178,161 @@ my(@arr)=@_; ); } +sub title ($$) +{ +my($class,$hashref)=@_; + + return $hashref->{"name"}.": ".$hashref->{"summary"}, +} + # $args{"ListItem"}=\%...; 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"=>$class->title($ListItem), + map(("rel_$_"=>top_dir('/project/Rel.pl?rel='.$_.'&project='.($args{"__PACKAGE__"}=~/^.*::([^:]+)::[^:]+$/)[0])), + qw(prev next)), + "rel_up"=>top_dir('/project/'), + "rel_start"=>top_dir(), %args, "head_css"=>($args{"head_css"} || "")." table.print_project td { vertical-align: top; } ", + "WebConfig::heading_novskip"=>1, ); $class->heading(); - $class->print_project({ %$ListItem }); + print $class->platforms($ListItem->{"platform"}); + $class->print_project({ %$ListItem },%args); return $W; } +sub one_item_list_read($$) +{ +my($class,$name)=@_; + + Wrequire "project::${name}::ListItem"; + my $item=eval('\@project::'.$name.'::ListItem::ListItem'); + do { warn "Broken project/$name/ListItem.pm"; next; } if !defined $item; + return @$item; +} + +sub item_hash_read () +{ +# FIXME: $class + 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(My::Project->one_item_list_read($dir)) }; + } + return %item; +} + +our @platforms=( + "unixuser"=>"UNIX", + "unixdevel"=>"UNIX-devel", + "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,%args)=@_; + + 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" if !$args{"novskip"}; + $r; +} + +sub section ($$) +{ +my($class,$name)=@_; + + my %item=( $class->one_item_list_read($name) ); + my $title=$class->title(\%item); + my $r=""; + + print $class->platforms($item{"platform"},"novskip"=>1); + + $r.=''."\n"; + $r.=''."\n"; + $r.='
'; + $r.=''."\n"; + $r.=''."\n"; + $r.='
'."\n"; + $r.=a_href "/project/$name/",$title; + $r.='
'."\n"; + $r.='
'."\n"; + $r.=vskip "1ex"; + $r; +} + 1;