From 326051281153aa80cd90265f36c6ff8967685dd0 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 17 Sep 2001 00:00:00 +0200 Subject: [PATCH 1/1] Initial import --- Gallery.pm | 79 +++++++++++++++++++ Gallery/Archive.pm | 45 +++++++++++ Gallery/Generator.pm | 61 +++++++++++++++ Gallery/Web.pm | 140 ++++++++++++++++++++++++++++++++++ Makefile | 6 ++ gal-gen | 175 +++++++++++++++++++++++++++++++++++++++++++ gal-merge | 58 ++++++++++++++ gal-scan | 48 ++++++++++++ nrt-blue/back.png | Bin 0 -> 1447 bytes nrt-blue/back.xcf | Bin 0 -> 1856 bytes nrt-blue/bot.png | Bin 0 -> 451 bytes nrt-blue/bot.xcf | Bin 0 -> 1442 bytes nrt-blue/left.png | Bin 0 -> 181 bytes nrt-blue/left.xcf | Bin 0 -> 1786 bytes nrt-blue/next.png | Bin 0 -> 1358 bytes nrt-blue/next.xcf | Bin 0 -> 1863 bytes nrt-blue/prev.png | Bin 0 -> 1415 bytes nrt-blue/prev.xcf | Bin 0 -> 1863 bytes nrt-blue/right.png | Bin 0 -> 225 bytes nrt-blue/right.xcf | Bin 0 -> 2294 bytes nrt-blue/style.css | 18 +++++ nrt-blue/theme.conf | 40 ++++++++++ nrt-blue/theme.pm | 37 +++++++++ nrt-blue/top.png | Bin 0 -> 318 bytes nrt-blue/top.xcf | Bin 0 -> 1341 bytes nrt/back.png | Bin 0 -> 590 bytes nrt/bot.png | Bin 0 -> 721 bytes nrt/left.png | Bin 0 -> 144 bytes nrt/next.png | Bin 0 -> 1309 bytes nrt/prev.png | Bin 0 -> 1352 bytes nrt/right.png | Bin 0 -> 210 bytes nrt/style.css | 17 +++++ nrt/theme.conf | 40 ++++++++++ nrt/theme.pm | 37 +++++++++ nrt/top.png | Bin 0 -> 459 bytes 35 files changed, 801 insertions(+) create mode 100644 Gallery.pm create mode 100644 Gallery/Archive.pm create mode 100644 Gallery/Generator.pm create mode 100644 Gallery/Web.pm create mode 100644 Makefile create mode 100755 gal-gen create mode 100755 gal-merge create mode 100755 gal-scan create mode 100644 nrt-blue/back.png create mode 100644 nrt-blue/back.xcf create mode 100644 nrt-blue/bot.png create mode 100644 nrt-blue/bot.xcf create mode 100644 nrt-blue/left.png create mode 100644 nrt-blue/left.xcf create mode 100644 nrt-blue/next.png create mode 100644 nrt-blue/next.xcf create mode 100644 nrt-blue/prev.png create mode 100644 nrt-blue/prev.xcf create mode 100644 nrt-blue/right.png create mode 100644 nrt-blue/right.xcf create mode 100644 nrt-blue/style.css create mode 100644 nrt-blue/theme.conf create mode 100644 nrt-blue/theme.pm create mode 100644 nrt-blue/top.png create mode 100644 nrt-blue/top.xcf create mode 100644 nrt/back.png create mode 100644 nrt/bot.png create mode 100644 nrt/left.png create mode 100644 nrt/next.png create mode 100644 nrt/prev.png create mode 100644 nrt/right.png create mode 100644 nrt/style.css create mode 100644 nrt/theme.conf create mode 100644 nrt/theme.pm create mode 100644 nrt/top.png diff --git a/Gallery.pm b/Gallery.pm new file mode 100644 index 0000000..b543b45 --- /dev/null +++ b/Gallery.pm @@ -0,0 +1,79 @@ +# Simple Photo Gallery +# (c) 2003--2005 Martin Mares + +package Gallery; + +use strict; +use warnings; + +BEGIN { + # Standard Perl module stuff + use Exporter(); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(&SetOptions &Start &img &Finish &RawHTML); + %EXPORT_TAGS = (); + @EXPORT_OK = qw(%CF); +} + +our %CF; +our $th; + +BEGIN { + $CF{"Title"} = "An Unnamed Gallery", + $CF{"HeadExtras"} = "", + $CF{"TopExtras"} = "", + $CF{"BotExtras"} = "", + $CF{"ParentURL"} = "../", + $CF{"BackURL"} = "", + $CF{"FwdURL"} = "", + $CF{"ImageSubpages"} = 1, + $CF{"AllowArchives"} = 1, + $CF{"PhotoUrlPrefix"} = "", + $CF{"ThumbUrlPrefix"} = "", + $CF{"MetaDataDir"} = ".", + $CF{"PhotoDir"} = ".", + $CF{"ThumbDir"} = ".", +} + +sub SetOptions(@) { + while (my $o = shift @_) { + my $v = shift @_; + $CF{$o} = $v; + if ($o eq "Theme") { + require $CF{"GalDir"} . "/$v/theme.pm"; + Gallery::Theme::Init($CF{"GalURL"} . "/$v"); + } + } +} + +sub Start() { + if (defined $ENV{"GATEWAY_INTERFACE"}) { + require Gallery::Web; + $th = new Gallery::Web; + } else { + if (@ARGV && $ARGV[0] eq "--generate") { + require Gallery::Generator; + $th = new Gallery::Generator; + } else { + print STDERR "Usage: $0 [--generate]\n"; + exit 1; + } + } + $th->Start(); +} + +sub img($$) { + $th->img(@_); +} + +sub Finish() { + $th->Finish(); +} + +sub RawHTML($) { + $th->RawHTML($_[0]); +} + +1; diff --git a/Gallery/Archive.pm b/Gallery/Archive.pm new file mode 100644 index 0000000..6fb3457 --- /dev/null +++ b/Gallery/Archive.pm @@ -0,0 +1,45 @@ +# Simple Photo Gallery: Web Archiver +# (c) 2005 Martin Mares + +package Gallery::Archive; +import Gallery qw(%CF); + +use IO::Handle; + +sub new($$) { + my ($cls, $type) = @_; + my $x = { 'type' => $type, 'files' => [] }; + return bless $x; +} + +sub Start($) { + my ($this) = @_; + my $type = $this->{'type'}; + my $cts = { "tar" => "application/x-tar", "zip" => "application/zip" }; + defined $cts->{$type} or die "Unknown archive type $type"; + print "Content-Type: ", $cts->{$type}, "\n"; + print "Content-Disposition: inline;filename=gallery.$type\n"; + print "\n"; +} + +sub Finish($) { + my ($this) = @_; + my $type = $this->{'type'}; + STDOUT->flush(); + chdir($CF{"PhotoDir"}) or die; + if ($type eq "tar") { + system("/home/mj/bin/tar", "cf", "-", @{$this->{'files'}}); + } elsif ($type eq "zip") { + system("zip", "-", @{$this->{'files'}}); + } else { die; } +} + +sub RawHTML($$) { +} + +sub img($$$) { + my ($this, $orig, $annot) = @_; + push @{$this->{'files'}}, $orig; +} + +1; diff --git a/Gallery/Generator.pm b/Gallery/Generator.pm new file mode 100644 index 0000000..b3542a1 --- /dev/null +++ b/Gallery/Generator.pm @@ -0,0 +1,61 @@ +# Simple Photo Gallery: Thumbnail Generator +# (c) 2003--2004 Martin Mares + +package Gallery::Generator; + +use strict; +use warnings; + +use Image::Magick; +use IO::Handle; + +BEGIN { import Gallery qw(%CF); } + +sub new() { return bless {}; } + +sub Start($) { + print "Generating thumbnails...\n"; STDOUT->autoflush(1); + my $notes = $CF{'MetaDataDir'} . "/notes"; + open NOTES, ">$notes" or die "Unable to write to notes ($notes): $!"; +} + +sub Finish($) { + close NOTES; + print "Done.\n"; +} + +sub RawHTML($$) { } + +sub img($$$) { + my ($this, $orig, $annot) = @_; + my ($base, $ext) = ($orig =~ /^(.*)\.([^.]+)$/) or die "Unable to dissect name $orig"; + print "$base: "; + my $p = new Image::Magick; + my $e; + my $img = $CF{"PhotoDir"} . $orig; + $e = $p->Read($img) and die "Error reading $img: $e"; + my ($wo, $ho) = $p->Get('width', 'height'); + my ($w, $h) = ($wo, $ho); + print "${w}x${h}"; + $p->Strip; + if ($w > $CF{"ThumbW"}) { + my $s = $CF{"ThumbW"} / $w; + $w = $w * $s; + $h = $h * $s; + } + if ($h > $CF{"ThumbH"}) { + my $s = $CF{"ThumbH"} / $h; + $w = $w * $s; + $h = $h * $s; + } + $w = int($w); + $h = int($h); + print " -> ${w}x${h} "; + $p->Resize(width=>$w, height=>$h); + my $thumb = $CF{"ThumbDir"} . "$base-thumb.jpg"; + $e = $p->Write($thumb) and die "Unable to write $thumb: $e"; + print NOTES "$base $w $h $wo $ho\n"; + print "OK\n"; +} + +1; diff --git a/Gallery/Web.pm b/Gallery/Web.pm new file mode 100644 index 0000000..03b8d7a --- /dev/null +++ b/Gallery/Web.pm @@ -0,0 +1,140 @@ +# Simple Photo Gallery: Web Interface +# (c) 2003--2005 Martin Mares + +package Gallery::Web; +import Gallery qw(%CF); + +use UCW::CGI; + +my $show_img; +my $send_archive; + +my %args = ( + 'i' => { 'var' => \$show_img, 'check' => '\d+' }, + 'a' => { 'var' => \$send_archive } +); + +sub new() { + UCW::CGI::parse_args(\%args); + if ($send_archive && $CF{'AllowArchives'}) { + require Gallery::Archive; + return new Gallery::Archive($send_archive); + } else { + return bless {}; + } +} + +sub error($) { + print "

Bad luck, the script is broken. Sorry.\n

$_[0]\n"; + print "\n"; +} + +our (@images, %widths, %heights, %widths_orig, %heights_orig, %imgno); + +sub load_notes() { + @images = (""); + %widths = (); + %heights = (); + %imgno = (); + my $notes = $CF{'MetaDataDir'} . "/notes"; + open NOTES, $notes or die "Unable to read notes ($notes): $!"; + while () { + chomp; + my ($n, $w, $h, $wo, $ho) = split /\s+/; + push @images, $n; + $widths{$n} = $w; + $heights{$n} = $h; + $widths_orig{$n} = $wo; + $heights_orig{$n} = $ho; + $imgno{$n} = $#images; + } + close NOTES; +} + +sub show_links($$$) { + my ($prev, $up, $next) = @_; + print "

"; + print ""; + print "Back" if $prev ne ""; + print "\n"; + print ""; + print "Forward" if $next ne ""; + print "\n"; + print "Up\n" if $up ne ""; +} + +sub Start($) { + my $title = UCW::CGI::html_escape($CF{"Title"}); + print < + +$CF{"HeadExtras"} + +$title + +$CF{"TopExtras"} +EOF + $UCW::CGI::error_hook = \&error; + load_notes(); + if ($show_img ne "" && $show_img > 0 && $show_img <= $#images) { + show_links(($show_img > 1 ? ("?i=".($show_img-1)) : ""), + "?", + ($show_img < $#images ? ("?i=".($show_img+1)) : "")); + } else { + show_links($CF{'BackURL'}, $CF{'ParentURL'}, $CF{'FwdURL'}); + print "

$CF{'Title'}

\n"; + print "

$CF{'SubTitle'}

\n" if defined $CF{'SubTitle'}; + } +} + +sub Finish($) { + print "$CF{'BotExtras'}\n\n"; +} + +sub RawHTML($$) { + my ($obj, $h) = @_; + print $h if $show_img eq ""; +} + +sub img($$$) { + my ($this, $orig, $annot) = @_; + my ($base, $ext) = ($orig =~ /^(.*)\.([^.]+)$/) or die "Unable to dissect name $orig"; + $annot = UCW::CGI::html_escape($annot); + my $id = $imgno{$base} || 0; + + if ($show_img ne "") { + if ($id == $show_img) { + print "

$annot

\n" if $annot ne ""; + my $img = $CF{'PhotoUrlPrefix'} . $orig; + print "

$orig\n"; + } + return; + } + + my $thumb = $CF{'ThumbUrlPrefix'} . "$base-thumb.jpg"; + my $w = $widths{$base} || 10; + my $h = $heights{$base} || 10; + my $side_w = $CF{"ThumbW"} + 2*$CF{"InteriorMargin"}; + my $side_h = $CF{"ThumbH"} + 2*$CF{"InteriorMargin"}; + my $box_w = $CF{"LeftW"} + $side_w + $CF{"RightW"}; + my $box_h = $CF{"TopH"} + $side_h + $CF{"BotH"}; + print "

\n"; + print "\n"; + print "\n"; + my $ol = $CF{'LeftW'} + $CF{'InteriorMargin'} + int(($CF{'ThumbW'} - $w)/2); + my $ot = $CF{'TopH'} + $CF{'InteriorMargin'} + int(($CF{'ThumbH'} - $h)/2); + my $tit = ($annot ne "") ? " title=\"$annot\"" : ""; + my $url = ($CF{"ImageSubpages"} ? "?i=$id" : $orig); + print "$orig\n"; + print "\n"; + print "\n"; + print "
\n"; +# if ($annot ne "") { +# print "

$annot\n"; +# } + print "

\n\n"; +} + +1; diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..264a0af --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +$(eval $(dir-setup)) + +$(call lib-copy, Gallery.pm) +$(call lib-copy, $(addprefix Gallery/,Archive.pm Generator.pm Web.pm)) + +$(call copy, $(addprefix nrt-blue/,back.png bot.png left.png next.png prev.png right.png top.png theme.pm style.css)) diff --git a/gal-gen b/gal-gen new file mode 100755 index 0000000..af63d4c --- /dev/null +++ b/gal-gen @@ -0,0 +1,175 @@ +#!/usr/bin/perl +# Generate image gallery +# (c) 2004--2007 Martin Mares + +# Syntax of input file: +# +# where is either ".", "l", "r" or "u" +# contains: +# d touch output file to +# D include in output file names +# n normalize contrast +# s sharpen +# h equalize histogram + +use Image::Magick; +use IO::Handle; + +use strict; +use warnings; + +my $maxw = 1024; +my $maxh = 768; +my $recompress = 1; + +STDERR->autoflush(1); +print STDERR "Searching for template file... "; + +my $tdir = ""; +my $templ; +my $maxdepth = 10; +while ($maxdepth--) { + my $t = "${tdir}gallery.cf"; + if (-f $t) { + $templ = $t; + last; + } + $tdir .= "../"; + last if ! -d $tdir; +} +if ($templ) { + print STDERR "$templ\n"; +} else { + print STDERR "NONE\n"; +} + +print "#!/usr/bin/perl\n\n"; +if ($templ) { + print "require \"$templ\";\n\n"; + print "SetOptions(\n"; +} else { + print < "/~mj/gal", + "GalDir" => "/home/mj/WWW/gal", + "Theme" => "nrt", +EOF +; +} +print < "Untitled" +); +Start(); +EOF +; + +#`rm -f [0-9]*.{jpg,png} *.tmp`; $? && die; + +my $idx = 0; +while () { + chomp; + my ($src, $date, $rotate, $xform) = split (/\t+/, $_); + $idx++; + my $id = sprintf("%03d", $idx); + if ($xform =~ /D/) { + $id = "$date-$id"; + $id =~ s/ /-/g; + } + my $dest; + my $is_jpeg = 0; + if ($src =~ /\.(jpg|JPG|jpeg)$/) { + $dest = "$id.jpg"; + $is_jpeg = 1; + } elsif ($src =~ /\.png$/) { + $dest = "$id.png"; + } else { + die "$src: Unknown image type"; + } + my $tmp = "$dest.tmp"; + print STDERR "$dest: $src "; + + my $p = new Image::Magick; + my $e; + $e = $p->Read($src) and die "Error reading $tmp: $e"; + $p->Strip; + $p->SetAttribute(quality=>90); + my ($w, $h) = $p->Get('width', 'height'); + print STDERR "-> ${w}x${h} "; + + my ($w0, $h0) = ($rotate eq "l" || $rotate eq "r") ? ($h, $w) : ($w, $h); + my ($ww, $hh) = ($w0, $h0); + if ($ww > $maxw) { + my $s = $maxw / $ww; + $ww = $ww * $s; + $hh = $hh * $s; + } + if ($hh > $maxh) { + my $s = $maxh / $hh; + $ww = $ww * $s; + $hh = $hh * $s; + } + $ww = int($ww); + $hh = int($hh); + + if ($recompress || + !$is_jpeg || + $xform ne "" || + $ww != $w0 || $hh != $h0) { + my $rot = 0; + if ($rotate eq "l") { $rot = 270; } + elsif ($rotate eq "r") { $rot = 90; } + elsif ($rotate eq "u") { $rot = 180; } + if ($xform =~ /s/) { + print STDERR "-> sharpen "; + $p->Sharpen(1); + } + if ($xform =~ /h/) { + print STDERR "-> equalize "; + $p->Equalize(); + } + if ($xform =~ /n/) { + print STDERR "-> normalize "; + $p->Normalize(); + } + if ($rot) { + print STDERR "-> rotate $rot "; + $p->Rotate(degrees=>$rot); + $rotate = "."; + } + if ($ww != $w0 || $hh != $h0) { + print STDERR "-> ${ww}x${hh} "; + $p->Resize(width=>$ww, height=>$hh); + } + $e = $p->Write($tmp) and die "Unable to write $tmp: $e"; + } else { + `cp $src $tmp`; $? && die; + } + + if ($is_jpeg) { + my $tran = "-optimize -copy none"; + if ($rotate eq ".") { } + elsif ($rotate eq "l") { $tran .= " -rotate 270 -trim"; } + elsif ($rotate eq "r") { $tran .= " -rotate 90 -trim"; } + elsif ($rotate eq "u") { $tran .= " -rotate 180 -trim"; } + else { die "Unknown rotation type $rotate"; } + print STDERR "-> $tran "; + `jpegtran $tran <$tmp >$dest`; $? && die; + } else { + rename $tmp, $dest or die; + } + + if ($xform =~ /d/) { + `touch -d "$date" $dest`; die if $?; + } + + unlink $tmp; + print STDERR "... OK\n"; + print "img(\"$dest\", \"\");\t\t# $src (${w0}x${h0})\n"; +} + +print "Finish();\n"; + +`rm -f *.tmp`; $? && die; diff --git a/gal-merge b/gal-merge new file mode 100755 index 0000000..26fc164 --- /dev/null +++ b/gal-merge @@ -0,0 +1,58 @@ +#!/usr/bin/perl +# Merge photos from multiple sources +# (c) 2008 Martin Mares + +use Image::EXIF; +use Data::Dumper; + +use strict; +use warnings; + +my @pics = (); +if (@ARGV) { + @pics = @ARGV; +} else { + while () { + chomp; + /^#/ && next; + /^$/ && next; + push @pics, $_; + } +} + +my %seen = (); +foreach my $f (@pics) { + my $e = new Image::EXIF($f); + my $i = $e->get_all_info(); + if ($e->error) { print STDERR "EXIF error on $f: ", $e->error, "\n"; } + else { + #print STDERR Dumper($i), "\n"; + my $o = $i->{'image'}->{'Image Orientation'} || "Top, Left-Hand"; + if ($o eq "Top, Left-Hand") { $o = "."; } + elsif ($o eq "Right-Hand, Top") { $o = "r"; } + elsif ($o eq "Left-Hand, Bottom") { $o = "l"; } + elsif ($o eq "Bottom, Right-Hand") { $o = "d"; } + else { + print STDERR "Unrecognized orientation: $o\n"; + $o = "."; + } + my $d = $i->{'image'}->{'Image Created'}; + if (defined($d)) { + $d =~ s/^(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})/$1$2$3-$4$5$6/ or die "Date parse error: $d"; + } else { + print STDERR "Unrecognized data, skipping: $f\n"; + next; + } + my $fn = $d; + if ($f =~ m{^\.\./orig/(\w+)/}) { + $fn = "$fn-$1"; + } + if (defined $seen{$fn}) { + my $c = ++$seen{$fn}; + $fn = "$fn-$c"; + } else { + $seen{$fn} = 1; + } + print "ln -s '$f' '$fn.jpg'\n"; + } +} diff --git a/gal-scan b/gal-scan new file mode 100755 index 0000000..db41a0b --- /dev/null +++ b/gal-scan @@ -0,0 +1,48 @@ +#!/usr/bin/perl +# Scan images in a list or gqview collection and prepare them for gal-gen +# (c) 2004--2007 Martin Mares + +use Image::EXIF; +use Data::Dumper; + +use strict; +use warnings; + +my @pics = (); +if (@ARGV) { + @pics = @ARGV; +} else { + while () { + chomp; + /^#/ && next; + /^$/ && next; + if (/^"(.*)"$/) { + push @pics, $1; + } else { + die "Parse error: $_"; + } + } +} + +foreach my $f (@pics) { + my $e = new Image::EXIF($f); + my $i = $e->get_all_info(); + if ($e->error) { print STDERR "EXIF error on $f: ", $e->error, "\n"; } + else { + #print STDERR Dumper($i), "\n"; + my $o = $i->{'image'}->{'Image Orientation'} || "Top, Left-Hand"; + if ($o eq "Top, Left-Hand") { $o = "."; } + elsif ($o eq "Right-Hand, Top") { $o = "r"; } + elsif ($o eq "Left-Hand, Bottom") { $o = "l"; } + elsif ($o eq "Bottom, Right-Hand") { $o = "d"; } + else { + print STDERR "Unrecognized orientation: $o\n"; + $o = "."; + } + my $d = $i->{'image'}->{'Image Created'} || "?"; + if ($d ne "?") { + $d =~ s/^(\d{4}):(\d{2}):(\d{2}) (\d{2}:\d{2}:\d{2})/$1-$2-$3 $4/ or die "Date parse error: $d"; + } + print "$f\t$d\t$o\tn\n"; + } +} diff --git a/nrt-blue/back.png b/nrt-blue/back.png new file mode 100644 index 0000000000000000000000000000000000000000..501909ca247a3d07b3adc102fb24cbb9c827e65d GIT binary patch literal 1447 zcmV;Y1z7rtP)-IrcGiSGDg#LTChafvyWyywJ?YpFBDATUV#aE2|Dx6+%>7d?+M{$8}b(nKwc_!1S3h z4jf#?v>DO=9)J)U;c$RNGQ_Hv=dx+*<74Jk8$wi5d^{QA#h2#r{zuDhnqN%_QC0D) zA7ta^Ww%vVEeLTp#8(qSOosSVzh~(yIyHe1wHDw0TQ6VkKh2(9Z8d=yH-M&r9umaj zI_ZqTn`@WeF!$G=yV$+Gm6GX_%UZXD*wOM#?E!?)FpMB|sW6#Lg!;5GX5LT7JK4JF z2fDjT;X_LS)DE>Xzc z8ltVWXWRgR2z6V=WuAh9Xf#M&${>*lap__|iUGw(A%?YSa*c}zH)87kgf}obz!E@h|$;-AsW+B3Z~77ap__o z7tZDBD>~SghwoR04(ftfOea-u(9js6E)~Ww0w@Jd(_<71HpjmGi~c?b*Oj$(qrR`O zZI5EnMiUUVJd{*i?&zafaOm%^i1)nVb@5z@X}X|5N`>S2M52|cuUzgYpR=*91Fk86 zlnTf8=qrNjN_1VI6gakzWqFjHiV#g3u6b_d16=JK;8c4S&zD%1M>re+z;S#^rc2rJ zka7|L06b4&l|0I2NkC{QrSPRf`U)u(fk0)i&zu!!?}6u;HX{bW;X@s4Sa)Qo4#1ZR z-;;N=`c>%%u3zbE``s{t+~1sJ_ugk|Y#RA+I((>u_3wN$^j%G`8=0_~Q)*a5P#46a zIu9*K)3SfXDDeO*RyMQ!)8!-T?z)}UwBb9=+y!ZNe!iScL*$0}D^@nMqh6Li>t;Mx}5(fg6ejt$yk*o_*EZC&#jZxy?TYH4d z7yA)H!?As&RHRbScCuob*StD^)Yx5}<|No@T@Z^0sZSdu>%!Q!&!VM`BgDV^_7TpX z$zu+scwWWlxBk*iw%20e;tW?i zO};+V!G*JVOw+~pDyB{inlv@|kw_|9PjvC;g#wQ~F_TisW8Y`(oIjVZy%!1uG-7d` zOhbfBLxe~)h*DqXyz=lf=6ci!xK zvxVZ~lD(46+xg-`jzNZ{k{yC_j!Qe#n)-w>Qb-u8L!W|nN}J+35I=x>YXOf<78lcn zT(VFpUI4}5=T@RxTV2T6#ZoO-sphh^V!2d3;!ETU+44fUVkg{NvQo&T?crm?t{h;D zNY@dhW)4VIe*51IN?oZgrL)CS!5&fX0=aq+DY@iwsaQkt+4pi(^-4LPujXnG3#9CS zQVr(ORO*Km{wZUgZyUh)LXzquP*06irBeQY90ruS?m#VRQ-oLAxG`Uo?Uy#iJkewa znqq>m=~+rl81xPj^_4{f(p8K?i!fA$h!xY)FF7$!c+Jaxh2DaG1f`l)j^AC8y_l|E zq{zovRtw^&ELut{RD(iPh2)kZeuAOigmAGT9jdw=!fV{a?hDN`wtl&X9cKHQ)sk_z z^WbI=8vyckmK@DRaUg$p&GER%CKO$EOcy;Vk=I2%68T*el?Zv)w;bK&x*l@-*D{wB z+sXEXx9j+C2-^Mb%-ng`QU4z2YF}?V`XcC^Z;p+m-e@>F*)BJu&&}R>L7$-qDqq za6Q6#@B>Fbe&JTn*j#nXajwRKrZ=3Jn0@L6$%)gaUlP9h|t_zOi;#wNVCcZ;^xoNYr zz*IVWu}~>5moD_5Ag4OJk8{WlnjQ2EH9N@uzq5npi4@~~X{ds6ppB0o<%}zYF)u<; zy7&HVc7$hh3yuGVJ%jmSXUj{gl%m$R23yTW;+tpVe+&^hQz*;q!bO#dvtSMp3z3{T IMu1BE6M?^X9{>OV literal 0 HcmV?d00001 diff --git a/nrt-blue/bot.png b/nrt-blue/bot.png new file mode 100644 index 0000000000000000000000000000000000000000..86bb5f2d0182788922ad864b5a51af5c63e1052c GIT binary patch literal 451 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 QSpWb407*qoM6N<$f&wjf5&!@I literal 0 HcmV?d00001 diff --git a/nrt-blue/next.xcf b/nrt-blue/next.xcf new file mode 100644 index 0000000000000000000000000000000000000000..ad0633341cc10b5f7f61970f2de83f4eb16bc13f GIT binary patch literal 1863 zcmb7_&2JM|5Wwfnu6G?faqKt_BmuHCQ9e*j6R4{~!4YYRTD2)H&_qZO;TYSjNbG2B ztH~)sToG#3N^t0Z06kPl2vzNwp1AZ@^_EnG9C8WRsSDoD*zYAy8&o>dc<0S;=Dm6Q z-i|Z&+`P4rOj~JtHU%WZQrQlX3PC?%Qt#MT0IVeKq&lfZ+97R@i%@(YJ%bsVHfql$ zGO1|Bv9FK|hzsvvzOXo(vg~Xj<>XVzf}P9ehkS$SOfol{bF9JIBkE*k64vnH;hOAX zj7T&@sWZEzDsH{n;M9fud?IOQGuDV&i=2zQIi)XJ%-RJiK6y38RWIby>3piNRUl{o z+g11MOy&0>MSKI`c~l=5_oP!D0>4w^l;h;SWMGi;TX#vl(&mUJY10FI4Yps}9Mjxj zw=~4GlFf4|G0EUHSkx(FeaOEUBels;6;dpIB)RnA1s*Ro!7Awr>2*@BS>^a^JF?~y z`D+~cI@=0R9GAsg36g50B&tHjQt($Y)JhbNPb5&)m3h2`-E^~?0Yw*-zgTv^Ha#f7 z1Lb{>++TVPP0+QjzU!h}x!>;B1+86Oc7r?hkkbAXF!Lw0fe= zL@KFz&(+<^PZl!))hQl5jfaVap?bpgxTQJ+ZH3X=D5Exb=}9vCxt6C5KG|j=c%cWf zTM(OKPq$$Z{z7j@UQzS}Pwu3eud}#C&G6{jj$B124m9hi=(qhLs-0%m{BN&Pc*z;r zV|XTV?BN(`a)Q|fzt1j@g5%neow1Z=EjGDI>DFwmYJ;=rbaD-cZvOZ`{IX( zLOQf=!Q!P)V_jZkxOwOD`S=^n8U(iK^x2brtvb{4oy$`nycsbBv^3&)f19E3_~E^@ zP5`R6YU>uK&&CJB=5d)k{#K_?qm^st_IzDZo~~AgYL$9p`J{8TA^|Iwh9Qr zvS()1ec)XDoF}L60tX(uzulOgJYAc=4K}nuU;NCuPu}ZiEMNnhx?>-o|7xbbP znvsEbjtw8=tAg-M=&c8j9FGlj5RE_yy`j#oNDEyt9ZJFobad|xdNtSso2Z*6UrPfv zg=UzBj?g7<@Dld&m2SB6&@z@tUduSSV)jb!5r*m$ew}Y^w-&;4s20NZ|7{`MR-_mU z(ohA{cWvC<=`+6LF|~~lDL?oBqlL7eOU>5*KCB69BUUmuzsMrGJEJpl}WwCJjz}Y=`-Kw0hjnUV4-$< literal 0 HcmV?d00001 diff --git a/nrt-blue/prev.png b/nrt-blue/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..68b2514cd7eda8049f5e7a9b8eddc72f69a69fcc GIT binary patch literal 1415 zcmV;21$g?2P)2P5k>$21r$j{ zK~!ko?U`MORAm^)f9K4c-JO{=U3bkiHz}bnGrb6cBrOdj3hSZ^yATSL0&j#aya=L; z?jq_&iXw;*vIx?OsGFiPTQe|q{U|AQvvu7)Gjrz5o{#sO_oIv1^>b!-X4eQ|p3B2L zGymWFe7w(d#_FNpa08po4Q_3KHb5Jo4bTQ?1GE8dIDmzV@_e*+BPY&nVfW`7>0der z$FZ?(t115-uRO?!b6fcCmuGq6>18+_HkpitWwoxwYIT@fxG2x=y-#t=;=;ve$Bw$Z zu=yLJNRkMNl#Rdgt#{V5;mO;tc=pWWd-!|ECyo_qqA)Ee%H){)>TJXV+`KT)so%>K z-3TcSTA8{c>WK%)cRLIoc2P>BRL#Fx%g$E(q|NK;Vt#KIX{t$6jZ&&9@c{XJmfpTD zq|_vdMoEL#=K9sZbmE83_>7JOd+of$IrmH9lCcz}VQhADJ+kjrIp9J{4juxBg2 z;t4+9b)w;qPAC48T_^D?;=k!a&4_<*=V3~2OdKnsP$GmvO@zN0@rMtMB4R}pro^!% zO?68}Y|mDF(Txbgl!_;)c!DTQQBw2f+s%rXRQ&|c6O30=(o{8_{|y0J5g&#rUMa>M zi|{>x5Q;Z;u4`Jn=LuXl!Yjo@VTw%k>{IButt*-qUoO_fd*zrQOj*97Z(8w3e!C>T zI2KVV#*9}}lBBitX$Y`rad$(9b3;|irIc^ko^c7>H zVMB=RJ04(OPZwGnj5aN&O%tPp#o04HW1|sk9__E|xcJs??pQXLeczu$rW&mbT7zXl z7)l2A4YPj3Qu2A{8sA(l%R>(@=D_}8ys|(ljhSHt8qY$O#o5ypif+W}wM*)LWXWxF zxbv?0?Emqfi;S6St|JDDvqb+_8}3gC!E7 zYSXCFv+F{ao7M&)6ytuv7oYvf>#rTC+utvo4=8jybavII(a8glsU`?gPMs{V{l#x7 z6{Bn6j}|F(JLK|NoQ~!(~?u4)c1t=v$EErnwz-bYzfHrkd`+A(OEYvBL9W!k{*d){Ej~Ix!K^D3Ww`)&Q!0GNWlU+iKsPgwV#2 zrW)T*ux*g3A&w;?mZ%0h?d1@u)CA)xS;s7%Q6vt<0*SqVuw&U2TTa%K_hlpF@Hfac;5|SneN>C#}snP}z#CGjv)x?gx zPDoCHJF1WnLXkLgDHphx3x^`qo)EX*QmIhDmry4-km3KXce7>0>c=TLV66MDENs(%*l@!Bf&^OG)On(u++(~6aM{pw%b@X<1A+F zLdLE*mtkVyikWt+YYPR-DOC#{5J1;ms(c?6}72WxB5LsBQ7LoN1j ziynneYx%=~LVM8gtIV5I`sE`K2a2B|eEF2*(#Gd#z8+*hLhe95fKbkUOvpQtwU~9U zkmsWuD*``Ci;mI`Q6U(9hJ@wd-$U_tf;+z}fuG$r&DXibxN-=$JH@uUZisLDbX7qn zJ6FZ#8-~VltN-lU6pCovN`?ap_TIZDxY!+znH;+kQ^oGQ7159ikSZFV4V8$LdF>S!BB^xjp< zskSnIVLY8M&UnH3xpRZ5kjkRX1JrNkW+wpoMYwL)R^FT%BHGUOM&Vxn?)=b^AZPpz z=uXW((;e0nI#D1;^qZ5N24MOwXycdZV+f3~Kh#Kx;Mcv;fWm_#KM}k)i7gPg%gw`8 zqSt$(0Ul@{yXVoflB#V-m-nd=Kl>03r93)~EVz+q(ode~KpC;JN>mf~-P1{fH!+I$ z)pOmbM@(WawrUs0Exeqj0~d|=Up^7jP~A<6|5@C2FHQ7N1DIlplu-v89-Gij<*C#$Q$j#O7N z;$65p*CWZU6kWI^+u@pF$}6gl}IEuPp$$A<$1a|hD02Gd&7{g*?`CGVS3oN zdy_5~&1BOwVh-3EG$|~$a#~&G$MpAo$M>l8u1Zz?%o%w?=Kxz|BbSQs-maG%AI0MK z@~>ZL@wu_xpiO&!{2%^rANd6q255+IwK^fFJ?1(8mfd8$S|H4mwCo2v&}IftS3j3^ HP6QRXJ8>tsP3 zrJI$u=R5H*POSFSbrQdCTivbh)Cx#Xb!}p3zhJ2JTmL2;I!cdhCy0EjCu>0*7l}&i z97jQh%{vD!cRh+dFLkr|208j~X{P)>l=)Cr`lxB;AMyk*FM#=6eQ6(r>{|nv@EkA| zXTUAR;k3#EuPV-%+Y9=g1%4NtbBUEfxCTvLus(Zat9OAj5ZNGN^*vysVwA4GhBl;j zVw^UCDi8wsiN4VUsz34u>6g|Fr^zUtoo3`YJTzd)zc^UYioMGl3%=g^K9!ut!$8w?dRQA-JJ6G{k=K= z;JoNPQu@T%zv6@a?YX|>)4WZVdANyrxRm#T&tE7%`6ZwI?l(FQS0(3CN)ZZKQJH12 ztnS**p`XOZ(SY?%s{M6pZqaSSIsWIiQFWWsn4j3fq*$Yfo1cO2Gg)-=3$(A)aKkhJ R`j)zF8n|UNp!Mf%^9!=xQr!Rm literal 0 HcmV?d00001 diff --git a/nrt-blue/style.css b/nrt-blue/style.css new file mode 100644 index 0000000..ce8d2de --- /dev/null +++ b/nrt-blue/style.css @@ -0,0 +1,18 @@ +.thf { margin: 0 0 0 0; padding: 0 0 0 0; float: left; border: none; } +.thumb { position: relative; width: 154px; height: 134px; background-color: black; } +.tt { position: absolute; top: 0; left: 0; } +.tl { position: absolute; top: 14px; left: 0; } +.ti { position: absolute; } +.tr { position: absolute; top: 14px; right: 0; } +.tb { position: absolute; bottom: 0; right: 0; } +.annot { width: 154px; text-align: center; } +IMG { border: none; } +H1 { text-align: center; } +H2 { text-align: center; margin-bottom: 3ex; } +P { clear: both; } +H2 { clear: both; } +.parent { text-align: center; } +.large { text-align: center; } +.back { float: left; } +.fwd { float: right; } +A[href]:hover { background-color: #11001d; } diff --git a/nrt-blue/theme.conf b/nrt-blue/theme.conf new file mode 100644 index 0000000..4242eba --- /dev/null +++ b/nrt-blue/theme.conf @@ -0,0 +1,40 @@ + +PicturesPerRow: 5 +BGColor: #ffffff +TextColor: #000000 +CommentColor: #000000 +FilmBGColor: #322207 +LinkColor: #000000 +ALinkColor: gold +VLinkColor: #000000 +LinkSize: 1 + +# linksize | top +# | v +# ------------------|---------------- --- +# | | | | +# ------------------v---------------- --- +# | | ______________________ | | ^ +# | | | ^ | | | | +# | | | | height | | | +# | | | | | | | +# l | | | | | | | right +# --->|---| |<--|----width------->| |---|<----- +# | | | | | | | +# | | | | | | | +# | | | | | | | +# | | | v | | | +# | | |---------------------| | | | +# | | | | v +# ----------------------------------- --- +# | | | +# ----------------------------------- --- +# ^ +# | bottom +# +# total = left + linksize + width + linksize + right + +# Decorations: top bottom left right +Decorations: 14 18 14 18 +ThumbWidth: 120 +ThumbHeight: 100 diff --git a/nrt-blue/theme.pm b/nrt-blue/theme.pm new file mode 100644 index 0000000..780ade0 --- /dev/null +++ b/nrt-blue/theme.pm @@ -0,0 +1,37 @@ +# NRT Theme for MJ's Photo Gallery +# (c) 2003--2004 Martin Mares ; GPL'ed +# Theme images taken from the cthumb package (c) Carlos Puchol + +package Gallery::Theme; + +use strict; +use warnings; + +sub Init($) { + my ($u) = @_; + Gallery::SetOptions( + "StyleSheet" => "$u/style.css", + "ThumbW" => 114, + "ThumbH" => 94, + "TopImg" => "$u/top.png", + "TopH" => 14, + "BotImg" => "$u/bot.png", + "BotH" => 18, + "LeftImg" => "$u/left.png", + "LeftW" => 14, + "RightImg" => "$u/right.png", + "RightW" => 18, + "InteriorMargin" => 4, + "ParentImg" => "$u/back.png", + "ParentH" => 48, + "ParentW" => 48, + "BackImg" => "$u/prev.png", + "BackH" => 48, + "BackW" => 48, + "FwdImg" => "$u/next.png", + "FwdH" => 48, + "FwdW" => 48 + ); +} + +1; diff --git a/nrt-blue/top.png b/nrt-blue/top.png new file mode 100644 index 0000000000000000000000000000000000000000..db5a677dd2134fd6c038ae4d2eaa7242f3f110b8 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^vw)b7gAGVt=U{aLQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#1{W(kyZ$2}#i3%>-$9`q%?D^9RW!BzQIg=Jv!Sd|FnT0bgO@3Py z{?T4o>wDqe6U~2nuGj`MWi6Pgzon@3!L<*i6V}Snos5&nsK3tJ>#&I@{>5OTgF$vcVA&n36%bOsO{G`ptl%2 MUHx3vIVCg!0MLPf$^ZZW literal 0 HcmV?d00001 diff --git a/nrt-blue/top.xcf b/nrt-blue/top.xcf new file mode 100644 index 0000000000000000000000000000000000000000..8298369dc7506cf170977544a17576bb0d2296ee GIT binary patch literal 1341 zcmbtTUvJV-6u-SK1Irko6GjkH5+tyM1%lBfW?8bmXreEC0n^peHEUs^UBaI5L7&yc zC!hQPehELwKE_@;_5-UGgaBo9O^e+7I2zEK23 z`ZzkyL*P9b=jyu>kOh1|+*&JMX|8x#zy~PD*8shTqy?xkyFQ=kR2aiIgA;Pxr8+dz zlpR&10LT-QM5%aER7`P_2!*SCAi{3ChD0W*zJ&b)@R^KrrO0-;&LXatE7h7->(q7j zL}b`gk!H`t8rzMbv0q&53aH#dm7(UiWuNcY=bQ0A=SLN8t!dZV-~%6F=*(>IWHo2 z_`FqKr2nrfQ?0TGrgh>>Cud{y6dk1x-2`6a(svgG|apI#=Wp3CV~SD>INsAJa%n?n8oZX_2L zUS}&5-86R&cQ>~RW!ZbLpe9$FIm6+d&cP~IY?mLe$`%RrttTxQrNC{j3`{Qm{zScwZo?J02JdtU-XDVT2c?~hnbv}3ICGNm98902@sIwH zJo)-kiTVwsl(^k)xLhtMiURZb93D>>%jFW&=@hfs4AbcplgR{Wnj(&4gkgvv2tWuy z@ZAgb^czA52qB%<)kM>sg24Od`5cr|(}Ex{6|5-8FpF)+rA zY_>x-Ml`#cQA%+<9$&t2Prumhc8KE`Q4}GHA|srus?|gTU_|4bW53_Oe)XPSuv)Dk zgn$qNgTVltb8ya$XaJr?vn30H0E{tk&Y_gTcDwzC+wlBkR;v|?qClFa7!HR>lElcy z7&9IL54Tuz5K5^LO$dRqEV0>akYyPbi^Xg2$n&FEuh-b^b`U~fJRV~_9wW;#q-hEv zgb|HW`qY;wr4#`Cc|lcGxZm%%UavTvPAG~3d7k6r;{$n~<9IycbUNXBz2bJep{gn< zrA&WK^RuTPG()`3T9i_RVTdS-AcVkhI7F6Z7>!0X+3c)lkH_o*l~N|7g<*&|jv=K4 z0F&E<5ICRDD9h4|_J(wc#yQ7eFhG(dwXIVh(6(hX=9)z3G%bsr+w^u?mL=}@JEW9e zv^SznG}{3!n|=_8U7@@zCQbI~;a+{V*S2EpPc+vVv+uuq0Nm3UbEuAfxYs)m_xxOwwu#y*nx-k7-R$4n`g!_At0+>#>%%a)d00000NkvXXu0mjf DkDgPz literal 0 HcmV?d00001 diff --git a/nrt/left.png b/nrt/left.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd3aed4b8d2b0c324184b7e199df9d8dff4e612 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^d_bJW!3HFMzhCeSNQHa4IEGZrd3(-~>wp6XYvAPM zivP+{H-7jEa%fJ|nN-H6qa#=KWv=I@Rh!Oi=`bkYzW&_zOLxz|iE{EZw#ei>zW(1n k4i=_H2L%Bn>Oiiz%Snw5Z2vinfL1Vgy85}Sb4q9e0RHbW0ssI2 literal 0 HcmV?d00001 diff --git a/nrt/next.png b/nrt/next.png new file mode 100644 index 0000000000000000000000000000000000000000..72a4e391f6b29845ec1e9f61e2a0f3493a568c80 GIT binary patch literal 1309 zcmV+&1>*XNP)7s8!`laXLCWqEe|urfD{XSXo(V8msF%rPFCD6bfV*M#m5>w-7m$d1GS( zv$L}(7K^A>tEkm#*XBCKX0usLPfufKX9pJ-7me-s+iFFZPN$n@u|A$YeM$!h2Tdzc ztJUcC?c0vAnx;`Im7;t;-%%x60+^;r@7}#@2{Af4+7zNztI_W6E)5P2{#A&U0G4G@ zsZ^q+r6tc0j4`^ryriwIEsDire+{A~0Aq}*)hcDPS$gy4jVB1k7@4L?=jZ42>C>mb z2GJ6L=*L#5R4SCoWa#zl*PbB^!=QXVPpMRjG)?>C5N!dxLVWn}fesH3sa!6TWm%pe zUcP)uU%!5(VzKCWJpW&=dLcm&AW0I!;V_;&c>-P69p~=t?V(U8pi-%TF$Mq-MG>J; z2oD}Sz@tZx9Al43aR;CUXRC}M7I4(sddj^7v?8$-EV#^vRu>-)hq!0G8JMn*<(dV1RQcSTWU}W>)HIkzyN~5AijM0;>o(Dd};cys|B)Q6dTY%%^V^8K)RYfQif+&iP zu}2Xj1{;MH&0HJ%DcO#sho@xl|A- T!%_XA00000NkvXXu0mjfJAZ90 literal 0 HcmV?d00001 diff --git a/nrt/prev.png b/nrt/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..71e11cd5a329cec25d08b5459759db91c3afd50c GIT binary patch literal 1352 zcmV-O1-JT%P)F#gFYcv6Hl^?bt!2ER+c`RVt_w3;i34P}RL4 zMkXZwgCZfZu^>hy#8hTfA=IU6D=`6;T2Rv#8aFM8li1k4{=VV8_%)CpcFTKFr5wpq ze4O*S*Vp&h91#)DvG_p;IID&LgVqpW&>8{^T0?+A>)Zn*&U%59O@!mPQ~OWj1x`5w zySuxXo}LEBahRT-#`g9$JkJAT3{k4pg9i`5aU3pPx`dZ6U&3`=_`Z)I2;zsKm@1V@ zG(J8~0K#K(a+1D(|4y}9ja=8IAPBnpXJ=>IyZ~rzZHxucVvNPg6APeI_}1~_ z#S8lKzTrNWtMWj+GBoYY-f)FWJq&3hl{KUirip3)8^*S8K z`E4!q3J(A?Gc&L(3(aN|p65kcN09;gg;x{>ckkZq`ltQEFDxuTQIv>re^*a{DB&MI zdi`nG7UJ3a39x_!~EFK$0Y6G8xFS3{ezgJyN>@#0j6xW}&JoR8>VLlR+Yp zz@0mHB88V_8DnE(P*oM9qoYVBli>O2Pxp>z#tom(=TRsWpePC?Ny6ORT;%Yos-jRR zAfL}8lga#<8F=#KN#yXluA@*WK+`m2vstXKulEgq{rdH`@Vc&JbaWJ{R4Uf!cLgYw zN?i??FJDGJpGP{KhNfxZ=#7kwKorHEUPVzbF);y2k}x(l2E#C57zT2=T-(}-rB0i} z`}glVZaA%DYHEt!ym><#8yocP+c#=9o8b=17^7mb*ww2j3O#%Fj8;}w=?TU%T7M9wA(bcQ#I=y}S zHmnbEJ5Wym#u(YQO$P@D^!V}Po)9xLGqkpdZsmzU23 z(Y4I^zE6!tgZB6LX>oBeHiY9iba;43%gf9EDMZgU>ia&`>vh`O+v^Llw6xT=C|eMw zY4(MFH&Lln&}=rr7y|%^ zqKJ`^5nQ`=4X<9kg0AZwy`@qKrfI^mEV!=wXUkj^2t`paK0Xf1vS8bG2*C4vB#6n$ zNm!PJMxz1Obz{AmMcVc{LFDs!0Do8MM~@zXh!6w;{<$sx{eun=SFc_L0H~^pd-v|) z%9Sf^{y5?&hJ!H%$8k`tR$-bZ%H=X@wHg>>NT<^%6biU_@gg)$Ln@VO>oh?S!1Fv< zmW4{Cf`fwt93LO!=g*%IMG=~&p;#=!Fbt&A>BzfstgjNSnE={H*7yCe+hns@Boc|= z3fal?IgW!M2uP>Xa2yAsC?c23ovMw-nt_%WV{ly;wr#_490WlCQ4}G|GGtlq2+&dx z1n_+yj^n_#ZFrssp65gF{{qko5(Gi``pEM<1VI4L^L^`Z>wag9AqawSMtGi&-9}Fh za57AIv6vsH&f*PyX9XCv&i%L1A;6$D1Q@i20E5;LV9+}E0Dl42yAF%TvDU5t0000< KMNUMnLSTY}K!ET7 literal 0 HcmV?d00001 diff --git a/nrt/right.png b/nrt/right.png new file mode 100644 index 0000000000000000000000000000000000000000..3e655dccb48e5febb5234624debd22db2de79d80 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^LO`6x!3HFc)gEjBQZqeW978JRyuDz_*X$s`dNHe; zp|hi7rzv}yn3B#L2DV38E5B~O?!D!jl=#+l+M23CUOJ}_*_`*ee8i%U=dgo|fMCr! zfri}MCoF@#6rcO76>YdC^;|Y@A+yHPfb75D{wr?3VEFSH^Z5nZ8@R2WzwWKtsJCKy m3r-;CDEM*m`UP?<3G78XLmeCaT9SZ{WbkzLb6Mw<&;$Vb5>puf literal 0 HcmV?d00001 diff --git a/nrt/style.css b/nrt/style.css new file mode 100644 index 0000000..b67b092 --- /dev/null +++ b/nrt/style.css @@ -0,0 +1,17 @@ +.thf { margin: 0 0 0 0; padding: 0 0 0 0; float: left; border: none; } +.thumb { position: relative; width: 154px; height: 134px; background-color: black; } +.tt { position: absolute; top: 0; left: 0; } +.tl { position: absolute; top: 14px; left: 0; } +.ti { position: absolute; } +.tr { position: absolute; top: 14px; right: 0; } +.tb { position: absolute; bottom: 0; right: 0; } +.annot { width: 154px; text-align: center; } +IMG { border: none; } +H1 { text-align: center; } +H2 { text-align: center; } +P { clear: both; } +H2 { clear: both; } +.parent { text-align: center; } +.large { text-align: center; } +.back { float: left; } +.fwd { float: right; } diff --git a/nrt/theme.conf b/nrt/theme.conf new file mode 100644 index 0000000..4242eba --- /dev/null +++ b/nrt/theme.conf @@ -0,0 +1,40 @@ + +PicturesPerRow: 5 +BGColor: #ffffff +TextColor: #000000 +CommentColor: #000000 +FilmBGColor: #322207 +LinkColor: #000000 +ALinkColor: gold +VLinkColor: #000000 +LinkSize: 1 + +# linksize | top +# | v +# ------------------|---------------- --- +# | | | | +# ------------------v---------------- --- +# | | ______________________ | | ^ +# | | | ^ | | | | +# | | | | height | | | +# | | | | | | | +# l | | | | | | | right +# --->|---| |<--|----width------->| |---|<----- +# | | | | | | | +# | | | | | | | +# | | | | | | | +# | | | v | | | +# | | |---------------------| | | | +# | | | | v +# ----------------------------------- --- +# | | | +# ----------------------------------- --- +# ^ +# | bottom +# +# total = left + linksize + width + linksize + right + +# Decorations: top bottom left right +Decorations: 14 18 14 18 +ThumbWidth: 120 +ThumbHeight: 100 diff --git a/nrt/theme.pm b/nrt/theme.pm new file mode 100644 index 0000000..780ade0 --- /dev/null +++ b/nrt/theme.pm @@ -0,0 +1,37 @@ +# NRT Theme for MJ's Photo Gallery +# (c) 2003--2004 Martin Mares ; GPL'ed +# Theme images taken from the cthumb package (c) Carlos Puchol + +package Gallery::Theme; + +use strict; +use warnings; + +sub Init($) { + my ($u) = @_; + Gallery::SetOptions( + "StyleSheet" => "$u/style.css", + "ThumbW" => 114, + "ThumbH" => 94, + "TopImg" => "$u/top.png", + "TopH" => 14, + "BotImg" => "$u/bot.png", + "BotH" => 18, + "LeftImg" => "$u/left.png", + "LeftW" => 14, + "RightImg" => "$u/right.png", + "RightW" => 18, + "InteriorMargin" => 4, + "ParentImg" => "$u/back.png", + "ParentH" => 48, + "ParentW" => 48, + "BackImg" => "$u/prev.png", + "BackH" => 48, + "BackW" => 48, + "FwdImg" => "$u/next.png", + "FwdH" => 48, + "FwdW" => 48 + ); +} + +1; diff --git a/nrt/top.png b/nrt/top.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d5866441822e70012cd5d6603b0ea2e6aedf81 GIT binary patch literal 459 zcmV;+0W|)JP) z7?LFxOlyrKNm^Gg91)G@=ysj4WL_#}1`%Pu-!HK?VI^FzS1>cuG)0zW*lae)vJ7dO zB1w|3vJHynC1Yk-YjHRnes49xpXYM9V7J?avE6Qia9*~qXcXVX^_V{HiiMp=C<}_5Fx0(TO zqcJ9&wSw@CJkNVgg4Vj%iS}&r4S*E>!W8H88AVZq@Ez#np;0L