X-Git-Url: http://www.average.org/gitweb/?p=mkgallery.git;a=blobdiff_plain;f=mkgallery.pl;h=70c00892396c19b89f6ee2f26889f9756f5b27de;hp=1a3688439edf8acf58a7d031b90c9bf85b4f9974;hb=7104bfdf4b25fc5bc8e8aaf9e65e6846a731bebc;hpb=035d9a5f682feb8fc622ec5b3136bb98c91c3ef0 diff --git a/mkgallery.pl b/mkgallery.pl index 1a36884..70c0089 100755 --- a/mkgallery.pl +++ b/mkgallery.pl @@ -29,7 +29,7 @@ package FsObj; use strict; use Carp; use POSIX qw/getcwd strftime/; -use CGI qw/:html *table *Tr *center *div/; +use CGI qw/:html *table *Tr *center *div *Link/; use Image::Info qw/image_info dim/; use Term::ReadLine; use Getopt::Long; @@ -40,26 +40,66 @@ binmode(STDOUT, ":utf8"); my $haveimagick = eval { require Image::Magick; }; { package Image::Magick; } # to make perl compiler happy +my $haverssxml = eval { require XML::RSS; }; +{ package XML::RSS; } # to make perl compiler happy + my @sizes = (160, 640); ###################################################################### my $incpath; +my $rssobj; my $debug = 0; my $asktitle = 0; my $noasktitle = 0; +my $rssfile = ""; charset("utf-8"); -GetOptions( 'incpath'=>\$incpath, +unless (GetOptions( + 'help'=>\&help, + 'incpath'=>\$incpath, 'asktitle'=>\$asktitle, 'noasktitle'=>\$noasktitle, - 'debug'=>\$debug); + 'rssfile=s'=>\$rssfile, + 'debug'=>\$debug)) { + &help; +} + +if ($rssfile && ! $haverssxml) { + print STDERR "You need to get XML::RSS from CPAN to use --rssfile\n"; + exit 1; +} my $term = new Term::ReadLine "Edit Title"; FsObj->new(getcwd)->iterate; +if ($rssobj) { + my $itemstodel = @{$rssobj->{'rss'}->{'items'}} - 15; + while ($itemstodel-- > 0) { + pop(@{$rssobj->{'rss'}->{'items'}}) + } + $rssobj->{'rss'}->save($rssobj->{'file'}); +} + +sub help { + + print STDERR <<__END__; +usage: $0 [options] + --help: print help message and exit + --incpath: do not try to find .include diretory upstream, use + specified path (absolute or relavive). Use with causion. + --debug: print a lot of debugging info to stdout as you run + --asktitle: ask to edit album titles even if there are ".title" files + --noasktitle: don't ask to enter album titles even where ".title" + files are absent. Use partial directory names as titles. + --rssfile=...: build RSS feed for newly added "albums", give name of rss file +__END__ + + exit 1; +} + sub new { my $this = shift; my $class; @@ -75,6 +115,7 @@ sub new { -base=>$name, -fullpath=>$fullpath, -inc=>'../'.$parent->{-inc}, + -rss=>'../'.$parent->{-rss}, }; } else { $class = $this; @@ -83,6 +124,7 @@ sub new { -root=>$root, -fullpath=>$root, -inc=>getinc($root), + -rss=>getrss($root), }; } bless $self, $class; @@ -115,6 +157,29 @@ sub getinc { } } +sub getrss { + my $fullpath=shift; # this is not a method + my $depth=20; # arbitrary max depth + + return "" unless $rssfile; + + my $rss=$rssfile; + while ( ! -f $fullpath."/".$rss ) { + $rss = "../".$rss; + last unless ($depth-- > 0); + } + if ($depth > 0) { + $rssobj->{'file'} = $rss; + $rssobj->{'rss'} = new XML::RSS (version=>2); + $rssobj->{'rss'}->parsefile($rss); + return $rss; + } else { + print STDERR "There is no $rssfile in this or parent ". + "directories, you must create one with mkgalrss.pl\n"; + exit 1; + } +} + sub iterate { my $self = shift; my $fullpath .= $self->{-fullpath}; @@ -488,13 +553,41 @@ sub startindex { my $inc = $self->{-inc}; my $title = $self->{-title}; + my $rsslink=""; + if ($self->{-rss}) { + $rsslink=Link({-rel=>'alternate', + -type=>'application/rss+xml', + -title=>'RSS', + -href=>$self->{-rss}}); + } print $IND start_html(-title => $title, -encoding=>"utf-8", + -head=>$rsslink, -style=>{-src=>[$inc."gallery.css", - $inc."lightbox.css"]}, - -script=>[{-code=>"var incPrefix='$inc';"}, + $inc."lightbox.css"], + -code=>"\ +.lbLoading {background: #fff url(".$inc."loading.gif) no-repeat center;} +#lbPrevLink {background: transparent url(".$inc. + "prevlabel.gif) no-repeat 0% 15%;} +#lbPrevLink:hover {background: transparent url(".$inc. + "prevlabel.gif) no-repeat 0% 15%;} +#lbNextLink {background: transparent url(".$inc. + "nextlabel.gif) no-repeat 0% 15%;} +#lbNextLink:hover {background: transparent url(".$inc. + "nextlabel.gif) no-repeat 0% 15%;} +#lbCloseLink {background: transparent url(".$inc. + "closelabel.gif) no-repeat center;} +.lightboxDesc {display: block;}"}, + -script=>[ + {-src=>$inc."mootools.js"}, {-src=>$inc."gallery.js"}, - {-src=>$inc."lightbox.js"}]), + {-src=>$inc."lightbox.js"}, + {-code=>"\ +var incPrefix='$inc'; +window.addEvent('domready',function(){ + Lightbox.init({descriptions: '.lightboxDesc', showControls: true}); +});"} + ]), a({-href=>"../index.html"},"UP"),"\n", start_center,"\n", h1($title),"\n", @@ -509,6 +602,18 @@ sub endindex { close($IND) if ($IND); undef $self->{-IND}; + if ($rssobj) { + my $rsstitle=sprintf "%s [%d images, %d subalbums]", + $self->{-title}, + $self->{-numofimgs}, + $self->{-numofsubs}; + my $rsslink=$rssobj->{'rss'}->channel('link')."index.html"; + $rssobj->{'rss'}->add_item( + title => $self->{-title}, + link => $rsslink, + description => $rsstitle, + ); + } } sub startsublist { @@ -524,6 +629,7 @@ sub sub_entry { my $name = $self->{-base}; my $title = $self->{-title}; + $self->{-parent}->{-numofsubs}++; print $IND Tr(td(a({-href=>$name.'/index.html'},$name)), td(a({-href=>$name.'/index.html'},$title))),"\n"; } @@ -557,6 +663,7 @@ sub img_entry { my $info = $self->{-info}; my ($w, $h) = dim($info); + $self->{-parent}->{-numofimgs}++; print $IND start_div({-class=>'ibox',-id=>$name, -OnClick=>"HideIbox('$name');"}),"\n", start_div({-class=>'iboxtitle'}), @@ -568,14 +675,23 @@ sub img_entry { $self->infotable, end_div,"\n"; - print $IND table({-class=>'slide'},Tr(td( - a({-href=>".html/$name-info.html",-title=>'Image Info', - -onClick=>"return showIbox('$name');"},$title), - br, - a({-href=>$medium,-rel=>"lightbox",-title=>$title}, + print $IND a({-name=>$name}), + table({-class=>'slide'},Tr(td( + div({-class=>"lightboxDesc $name"}, + a({-href=>".html/$name-info.html",-title=>'Image Info', + -onClick=>"return showIbox('$name');"}, + $title)), + a({-href=>".html/$name-static.html",-title=>$title, + -id=>$name, + -OnClick=>"Lightbox.show('$medium','$title');return false;"}, img({-src=>$thumb})), br, - a({-href=>$name,-title=>'Original Image'},"($w x $h)"), + div({-style=>"display: none;"}, + a({-href=>$thumb,-rel=>"lightbox[thm]", + -title=>'Thumb'},"Thm"), + a({-href=>$medium,-rel=>"lightbox[sml]", + -title=>'Small'},"Sml")), + a({-href=>$name,-title=>'Original'},"($w x $h)"), br))),"\n"; }