X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/tgal/blobdiff_plain/9fc5e8c1660ca79782e0ed03361baff3eb120044..33b14649a11c8450f7d401a2109737e0063d5ff2:/mason/.perl-lib/TrivGal.pm diff --git a/mason/.perl-lib/TrivGal.pm b/mason/.perl-lib/TrivGal.pm index 193f122..4e01f51 100644 --- a/mason/.perl-lib/TrivGal.pm +++ b/mason/.perl-lib/TrivGal.pm @@ -148,6 +148,8 @@ export qw{%SIZE}; our %SIZE = (smallthumb => 96, medthumb => 144, bigthumb => 228, + small => 480, + embed => 720, view => 1200); export qw{init}; @@ -217,15 +219,20 @@ package TrivGal::Image { }, $cls; } - sub scale ($$) { - my ($me, $scale) = @_; + sub scale ($$;$) { + my ($me, $scale, $forcep) = @_; + my $m = HTML::Mason::Request->instance; my $path = $me->{path}; my $sz = $SIZE{$scale} or die "unknown scale `$scale'"; my $thumb = "$CACHE/scale.$sz/$path"; - my $thumburl = "$CACHEURL/scale.$sz/$path"; + my $thumburl = + $m->interp->apply_escapes("$CACHEURL/scale.$sz/$path", "u"); my $st = stat $thumb; if (defined $st && $st->mtime > $me->{mtime}) { return $thumburl; } + return + $m->interp->apply_escapes("$SCRIPTURL/$path", "u") . "?scale=$scale" + unless $forcep; my ($dir, $base, $ext) = TrivGal::split_path $thumb; my $ty = $TYPE{lc $ext} or die "unknown type `$ext'"; @@ -246,16 +253,17 @@ package TrivGal::Image { my ($wd, $ht) = ($img->width, $img->height); my $max = $wd > $ht ? $wd : $ht; - if ($max <= $sz) { return "$IMGURL/$path"; } + if ($max <= $sz) + { return $m->interp->apply_escapes("$IMGURL/$path", "u"); } my $sc = $sz/$max; my $scaled = $img->create_scaled_image($sc*$wd, $sc*$ht); $scaled->image_set_format($ty->imlibfmt); $scaled->set_quality(90); - my $new = "$TMP/t${$}$ext"; - make_path $TMP; + my $new = "$TMP/t$$-$ext"; + make_path $TMP, { mode => 0771 }; $scaled->save($new); - make_path $dir; + make_path $dir, { mode => 0771 }; rename $new, $thumb; return $thumburl; } @@ -285,6 +293,7 @@ sub listdir ($) { my (@d, @f); my $ix = undef; + $path =~ s#/$##; if (-f "$path/.tgal.index") { open my $f, "<", "$path/.tgal.index"; my $item = undef; @@ -297,29 +306,31 @@ sub listdir ($) { $comment = defined $comment ? $comment . "\n" . $_ : $_; } else { if ($item && $comment) { $item->comment($comment); } - my ($indexp, $name, $c) = - /^ (! \s+)? # index flag + my ($flags, $name, $c) = + /^ (?: ([-!]+) \s+)? # flags (\S+) \s* # filename (\S | \S.*\S )? # start of the comment \s* $/x; + my $indexp = $flags =~ /!/; + my $hidep = $flags =~ /-/; $name = urldecode $name; my $list; + $item = TrivGal::Item->new($name); if ($name =~ m#/$#) { $list = \@d; die "can't index a folder" if $indexp; } else { $list = \@f; - my ($dir, $base, $ext) = TrivGal::split_path $name; + my ($dir, $base, $ext) = split_path $name; die "unknown image type" unless $TYPE{lc $ext}; if ($indexp) { die "two index images" if defined $ix; $ix = $item; } } - $item = TrivGal::Item->new($name); $comment = $c; - push @$list, $item; + push @$list, $item unless $hidep; } } if ($item && $comment) { $item->comment($comment); } @@ -338,7 +349,7 @@ sub listdir ($) { my $st = stat "$path/$e"; my $list = undef; if ($dotp) { } - elsif (-d $st) { $list = \@d; } + elsif (-d $st) { $list = \@d; $e .= "/"; } elsif ($TYPE{lc $ext} && -f $st) { $list = \@f; } $list and push @$list, TrivGal::Item->new($e); }