X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/tgal/blobdiff_plain/24f4eac3128ad2053a503924519076a2cd342e95..33b14649a11c8450f7d401a2109737e0063d5ff2:/mason/.perl-lib/TrivGal.pm diff --git a/mason/.perl-lib/TrivGal.pm b/mason/.perl-lib/TrivGal.pm index 600e9f5..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; + make_path $TMP, { mode => 0771 }; $scaled->save($new); - make_path $dir; + make_path $dir, { mode => 0771 }; rename $new, $thumb; return $thumburl; } @@ -298,12 +306,14 @@ 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); @@ -312,7 +322,7 @@ sub listdir ($) { 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; @@ -320,7 +330,7 @@ sub listdir ($) { } } $comment = $c; - push @$list, $item; + push @$list, $item unless $hidep; } } if ($item && $comment) { $item->comment($comment); }