diff options
author | Andinus <andinus@nand.sh> | 2022-06-11 21:06:46 +0530 |
---|---|---|
committer | Andinus <andinus@nand.sh> | 2022-06-11 21:06:46 +0530 |
commit | dcceb30788af8433e8184ab15fe8833f5539145b (patch) | |
tree | 2bcd3ed110096ab0cb06c981064b45f52a3c469c | |
parent | 02f8885f05f09dcb57a358fcd3440eaf679c8c02 (diff) | |
download | crater-dcceb30788af8433e8184ab15fe8833f5539145b.tar.gz |
Gallery: Document code, add title fallback
-rw-r--r-- | lib/Crater/Gallery.rakumod | 56 | ||||
-rw-r--r-- | lib/Crater/Routes/Gallery.rakumod | 2 |
2 files changed, 32 insertions, 26 deletions
diff --git a/lib/Crater/Gallery.rakumod b/lib/Crater/Gallery.rakumod index 4fdfac8..fdb8284 100644 --- a/lib/Crater/Gallery.rakumod +++ b/lib/Crater/Gallery.rakumod @@ -3,6 +3,7 @@ class Crater::Gallery { has Str $!title; submethod TWEAK() { + # Get title from file if exists. my $title-file = $!directory.add(".crater/title"); $!title = $title-file.slurp.chomp if $title-file.f; } @@ -13,43 +14,48 @@ class Crater::Gallery { method list(:@sub-dir) { # This will be considered an attempt to attack. There is no # reason to check '.' I belive. - if @sub-dir.grep('.'|'..').elems { - die "[!!!] @sub-dir contains '..'/'.'"; - } + die "[!!!] @sub-dir contains '..'/'.'" if @sub-dir.grep('.'|'..'); - my @gallery; + # Serve the subdirectory if passed. my @paths = @sub-dir ?? $!directory.add(@sub-dir.join("/")).dir !! $!directory.dir; - with $!title { - push @gallery, %( :type<heading>, :text($_) ); - } + # Gallery holds all the elements that will be shown. + my @gallery; + @gallery.push(%( :type<heading>, :text($_) )) with $!title; # Add directories on top. for @paths.grep(*.d).sort { next if .ends-with(".crater"); - push @gallery, %( :type<directory>, - :text($_.relative($!directory)) ); + push @gallery, %(:type<directory>, :text($_.relative($!directory))); } - for @paths.grep(*.f).sort(*.modified) { - my Str $ext = .extension.lc; - # For images get the original if thumbnail doesn't exist, - # otherwise use the thumbnail. - if $ext eq "jpg"|"png" { - my $rel = $_.relative($!directory); - my $alt = $rel; - unless $!directory.add(".crater/thumbnails").add($rel).f { - $rel ~= "?original"; + # Adding supported file types. + for @paths.grep(*.f).sort(*.modified) -> $f { + my $rel = $f.relative($!directory); + + given $f.extension.lc { + when 'jpg'|'png' { + my $thumb = $!directory.add(".crater/thumbnails").add($rel); + + # For images get the original if thumbnail doesn't + # exist, otherwise use the thumbnail. + push @gallery, %( + :type<img>, + :src($thumb.f ?? $rel !! "{$rel}?original"), + alt => $rel + ); + } + when '0' { + push @gallery, %(:type<heading>, :text($f.slurp.chomp)); + } + when 'txt' { + push @gallery, %(:type<text>, :text($f.slurp.chomp)); + } + default { + note "Unhandled file: $f"; } - push @gallery, %( :type<img>, :src($rel), :$alt ); - } elsif $ext eq "0" { - push @gallery, %( :type<heading>, :text($_.slurp.chomp) ); - } elsif $ext eq "txt" { - push @gallery, %( :type<text>, :text($_.slurp.chomp) ); - } else { - note "Unhandled file: $_"; } } return @gallery; diff --git a/lib/Crater/Routes/Gallery.rakumod b/lib/Crater/Routes/Gallery.rakumod index ede5010..ebf40b4 100644 --- a/lib/Crater/Routes/Gallery.rakumod +++ b/lib/Crater/Routes/Gallery.rakumod @@ -30,7 +30,7 @@ sub gallery-routes( template 'gallery.crotmp', { gallery => $gallery.list(sub-dir => @path), - title => $gallery.title(), + title => $gallery.title() // "Gallery", nav => @nav, show-nav => @path.elems ?? True !! False }; |