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.)
Writing the viewers
[[!albumimage image=foo.jpg album=myalbum
title=...
caption=...
copyright=...
size=...
viewertemplate=...
]]
Each viewer contains one [[!albumimage ]]
directive. This
sets the image
filename, the album
in which this image appears,
and an optional caption
, and can override the size
at which to
display the image and the viewertemplate
to use to display the
image.
It can also have title
, copyright
and date
parameters, which
are short-cuts for meta directives.
The viewer can also have any other content, but typically the directive will be the only thing there.
Eventually, there will be a specialized CGI user interface to edit all the photos of an album at once, upload a new photo (which will attach the photo but also write out a viewer page for it), or mark an already-uploaded photo as a member of an album (which is done by writing out a viewer page for it).
The [[!albumimage ]]
directive is replaced by an
img, wrapped in some formatting using a
template (by default albumviewer.tmpl
). The template can (and
should) also include "next photo", "previous photo" and
"up to gallery" links.
The next/previous links are themselves implemented by
inlining the next or previous
photo, using a special template (by default albumnext.tmpl
or albumprev.tmpl
), in archive
/quick
mode.
With hindsight, using an inline here is wrong - I should just run hooks and fill in the template within the album plugin. inline has some specialized functionality that's overkill here, and its delayed HTML substitution breaks the ability to have previous/up/next links both above and below the photo, for instance. --smcv
Writing the album
The album contains one [[!album ]]
directive. It may also
contain any number of [[!albumsection ]]
directives, for
example the demo album linked above could look like:
[[!album ]]
<!-- replaced with one uncategorized photo -->
## Gamarra
[[!albumsection filter="link(gamarra)"]]
<!-- all the Gamarra photos -->
## Smokescreen
[[!albumsection filter="link(smokescreen)"]]
<!-- all the Smokescreen photos -->
...
The [[!album ]]
directive is replaced by an
inline which automatically includes every
page that has an [[!albumimage ]]
directive linking it to this
album, except those that will appear in an [[!albumsection ]]
.
The inline
is in archive
/quick
mode, but includes some
extra information about the images, including file size and a
thumbnail (again, made using img). The
default template is albumitem.tmpl
, which takes advantage
of these things.
Each [[!albumsection ]]
is replaced by a similar inline, which
selects a subset of the photos in the album.