Plugin: album
Author: Simon McVittie
Included in ikiwiki: no
Enabled by default: no
Included in goodstuff: no
Currently enabled: no
Available in a git repository.
Branch: smcv/album
Author: Simon McVittie
Available from smcv's git repository, in the album
branch
(users/smcv/gallery contains some older
thoughts about this plugin).
This plugin formats a collection of images into a photo album, in the same way as many websites: good examples include the PHP application Gallery, Flickr, and Facebook's Photos "application".
I've called it album
to distinguish it from
contrib/gallery, although gallery
might well be
a better name for this functionality.
The web UI I'm trying to achieve consists of one HTML page of thumbnails as an entry point to the album, where each thumbnail links to a "viewer" HTML page with a full size image, next/previous thumbnail links, and comments.
(The Summer of Code gallery plugin does the next/previous UI in Javascript using Lightbox, which means that individual photos can't be bookmarked in a meaningful way, and the best it can do as a fallback for non-Javascript browsers is to provide a direct link to the image.)
album
directive
Each page containing an album
directive is treated as a photo album.
Every image attached to an album or its subpages is considered to be part of
the album. A "viewer" page, with the wiki's default page extension, will be
generated to display the image, if there isn't already a page of the same
name as the image: for instance, if debconf
is an album and
debconf/tuesday/p100.jpg
exists, then debconf/tuesday/p100.mdwn
might
be created.
There's currently a hard-coded list of extensions that are treated as images:
png
, gif
, jpg
, jpeg
or mov
files. More image and video types could
be added in future. Videos aren't currently handled very well;
ideally, something like totem-video-thumbnailer would be used.
The album
directive also produces an inline which
automatically includes all the viewers for this album, except those that
will appear in an albumsection (if every image
is in a section, then the album
directive won't have any visible effect).
The inline
is in archive
and quick
mode, but can include some
extra information about the images, including file size and a thumbnail made
using img). The default template is albumitem.tmpl
,
which takes advantage of these things.
albumsection
directive
The albumsection
directive is used to split an album into sections. It can
only appear on a page that also has the album directive.
The filter
parameter is a PageSpec against which viewer pages
are matched. The albumsection
directive displays all the images that match
the filter, and the album
directive displays any leftover images, like
this:
# Holiday photos
[[!album ]]
<!-- replaced with a list of any uncategorized photos, which might be
empty -->
## People
[[!albumsection filter="tagged(people)"]]
<!-- replaced with a list of photos tagged 'people', including
any that are also tagged 'landscapes' -->
## Landscapes
[[!albumsection filter="tagged(landscapes)"]]
<!-- replaced with a list of photos tagged 'landscapes', including
any that are also tagged 'people' -->
albumimage
directive
Each viewer page produced by the album directive
contains an albumimage
directive, which is replaced by an
img, wrapped in some formatting using a
template (by default it's albumviewer.tmpl
). That template can also include
links to the next photo, the previous photo and the album it's in; the default
template has all of these.
The next/previous links are themselves implemented by evaluating a template,
either albumnext.tmpl
or albumprev.tmpl
by default.
The directive can also have parameters:
title
,copyright
anddate
are short-cuts for the corresponding meta directivescaption
sets a caption which is displayed in the album and viewer pages
The viewer page can also have other contents before or after the actual image viewer.
Bugs
The plugin doesn't do anything special to handle albums that are subpages of each other. If, say,
debconf
anddebconf/monday
are both albums, thendebconf/monday/p100.jpg
will currently be assigned to one or the other, arbitrarily.The plugin doesn't do anything special to handle photos with similar names. If you have
p100.jpg
andp100.png
, one will get a viewer page calledp100
and the other will be ignored.If there's no
albumimage
in a viewer page, one should probably be appended automatically.
TODO
The documentation should mention how to replicate the appearance of
album
andalbumsection
using aninline
of viewer pages.The documentation should mention all the template variables and all the parameters.
The generated viewer page should include most or all of the possible parameters to the
albumimage
directive, with empty values, as a template for editing.The generated viewer page should extract as much metadata as possible from the photo's EXIF tags (creation/modification dates, author, title, caption, copyright). smcv has a half-written implementation which runs
scanimage
hooks, and has anexiftool
plugin using Image::ExifTool as a reference implementation of that hook.There should be an option to reduce the size of photos and write them into an underlay, for this workflow:
- your laptop's local ikiwiki has two underlays,
photos
andwebphotos
photos
contains full resolution photos with EXIF tags- for each photo that exists in
photos
but not inwebphotos
, the album plugin automatically resamples it down to a web-compatible resolution (smcv uses up to 640x640), optimizes it withjpegoptim
, strips out all EXIF tags, and and writes it into the corresponding location inwebphotos
webphotos
is what you rsync to the web server- the web server's ikiwiki only has
webphotos
as an underlay
- your laptop's local ikiwiki has two underlays,
Eventually, there could be a specialized CGI user interface to batch-edit all the photos of an album (so for each photo, you get an edit box each for title, author, copyright etc.) - this would work by making programmatic edits to all the
albumimage
directives.