X-Git-Url: http://www.average.org/gitweb/?p=mkgallery.git;a=blobdiff_plain;f=mkgallery.pl;h=1031da6949dfab9397931ccfc0adfa993dfa33b5;hp=40840b76e1425b639b8412ea592c7a5bf475acb9;hb=5527f9d9dd107c49860360979bcea661d83039e2;hpb=035a5d0ef46b005f32ffacaba9ae660f9540fed5 diff --git a/mkgallery.pl b/mkgallery.pl index 40840b7..1031da6 100755 --- a/mkgallery.pl +++ b/mkgallery.pl @@ -29,6 +29,7 @@ package FsObj; use strict; use Carp; use POSIX qw/getcwd strftime/; +use HTTP::Date; use CGI qw/:html *table *Tr *td *center *div *Link/; use Image::Info qw/image_info dim/; use Term::ReadLine; @@ -109,14 +110,13 @@ sub new { -depth=>$parent->{-depth}+1, -base=>$name, -fullpath=>$parent->{-fullpath}.'/'.$name, - -relpath=>$parent->{-relpath}.'/'.$name, + -relpath=>$parent->{-relpath}.$name.'/', -inc=>'../'.$parent->{-inc}, }; } else { $class = $this; my $root=shift; $self = { - -depth=>0, -root=>$root, -fullpath=>$root, }; @@ -158,12 +158,14 @@ sub initpaths { $pos=index($inc,'/',$pos+1)) { $dp++; } + $self->{-depth} = $dp; for ($pos=length($fullpath);$dp>0 && $pos>0; $pos=rindex($fullpath,'/',$pos-1)) { $dp--; } my $relpath = substr($fullpath,$pos); $relpath =~ s%^/%%; + $relpath .= '/' if ($relpath); $self->{-relpath} = $relpath; $self->{-toppath} = substr($fullpath,0,$pos); #print "rel=$relpath, top=$self->{-toppath}, inc=$inc\n"; @@ -172,14 +174,16 @@ sub initpaths { $self->{-inc} = 'NO-.INCLUDE-IN-PATH/'; # won't work anyway $self->{-rss} = ''; $self->{-relpath} = ''; + $self->{-depth} = 0; } } sub initrss { my $self=shift; # this is not a method but we cheat my $fullpath=$self->{-fullpath}; + my $toppath=$self->{-toppath}; my $inc=$self->{-inc}.$incdir.'/'; - my $conffile=$inc.'rss.conf'; + my $conffile=$toppath.'/'.$incdir.'/rss.conf'; my $CONF; if ($rssfile) { @@ -217,9 +221,16 @@ sub initrss { } $rssobj->{'rss'}->save($rssobj->{'file'}); } else { - my $link=""; - for (my $pos=index($rssfile,'/');$pos>=0; - $pos=index($rssfile,'/',$pos+1)) { + my $link; + my $p1; + my $p2; + for ($p1=0,$p2=length($toppath); + substr($rssfile,$p1,3) eq '../' && $p2>0; + $p1+=3,$p2=rindex($toppath,'/',$p2-1)) {;} + $link=substr($toppath,$p2); + $link =~ s%^/%%; + $link .= '/' if ($link); + while (($p1=index($rssfile,'/',$p1+1)) >= 0) { $link = '../'.$link; } @@ -629,11 +640,11 @@ sub startindex { my $inc = $self->{-inc}.$incdir.'/'; my $title = $self->{-title}; my $rsslink=""; - if ($self->{-rss}) { + if ($rssobj) { $rsslink=Link({-rel=>'alternate', -type=>'application/rss+xml', -title=>'RSS', - -href=>$self->{-rss}}); + -href=>$self->{-inc}.$rssfile}); } print $IND start_html(-title => $title, -encoding=>"utf-8", @@ -657,7 +668,7 @@ sub startindex { -id => 'indexContainer'}), "\n"; my $EVL; - if (open($EVL,$inc.'header.pl')) { + if (open($EVL,$self->{-toppath}.'/'.$incdir.'/header.pl')) { my $prm; while (<$EVL>) { $prm .= $_; @@ -671,6 +682,9 @@ sub startindex { ); print $IND eval $prm,"\n"; } else { + print STDERR "could not open ", + $self->{-toppath}.'/'.$incdir.'/header.pl', + " ($!), reverting to default header"; print $IND a({-href=>"../index.html"},"UP"),"\n", h1({-class=>'title'},$title),"\n", } @@ -682,7 +696,7 @@ sub endindex { print $IND end_div; my $EVL; - if (open($EVL,$self->{-inc}.$incdir.'/footer.pl')) { + if (open($EVL,$self->{-toppath}.'/'.$incdir.'/footer.pl')) { my $prm; while (<$EVL>) { $prm .= $_; @@ -695,6 +709,10 @@ sub endindex { -breadcrumbs => "breadcrumbs unimplemented", ); print $IND eval $prm,"\n"; + } else { + print STDERR "could not open ", + $self->{-toppath}.'/'.$incdir.'/footer.pl', + " ($!), reverting to default empty footer"; } print $IND end_html,"\n"; @@ -706,11 +724,12 @@ sub endindex { $self->{-numofimgs}, $self->{-numofsubs}; my $rsslink=$rssobj->{'rss'}->channel('link'). - $self->{-relpath}."/index.html"; + $self->{-relpath}."index.html"; $rssobj->{'rss'}->add_item( title => $self->{-title}, link => $rsslink, description => $rsstitle, + pubDate => time2str(time), ); } }