From 3741acaec618fde1e4c230ee2a503987746235e4 Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Fri, 30 Dec 2005 13:14:01 +0000
Subject: [PATCH] Branched from version 1.1.

---
 Changes                       |   9 ++
 Memories.pm                   | 148 +++++++++++++++++++++
 Memories/Album.pm             |  77 +++++++++++
 Memories/Comment.pm           |   7 +
 Memories/Config.pm            |  55 ++++++++
 Memories/DBI.pm               |   7 +
 Memories/Photo.pm             | 239 ++++++++++++++++++++++++++++++++++
 Memories/SystemTag.pm         |  62 +++++++++
 Memories/Tag.pm               | 100 ++++++++++++++
 Memories/User.pm              |  67 ++++++++++
 README                        |  59 +++++++++
 memories.sql                  |  58 +++++++++
 tag_dates                     |  10 ++
 templates/album/denied        |   7 +
 templates/album/list          |  25 ++++
 templates/album/view          |   9 ++
 templates/album_adder         |   9 ++
 templates/calendar            |  43 ++++++
 templates/custom/list         |  20 +++
 templates/footer              |   9 ++
 templates/frontpage           |  35 +++++
 templates/header              |  23 ++++
 templates/login_box           |  34 +++++
 templates/macros              |  62 +++++++++
 templates/memories.css        |   8 ++
 templates/memories.png        | Bin 0 -> 40186 bytes
 templates/nav                 |  11 ++
 templates/pager               |  19 +++
 templates/photo/comment       |  18 +++
 templates/photo/exif          |  16 +++
 templates/photo/recent        |  18 +++
 templates/photo/tagedit       |  21 +++
 templates/photo/upload        |  63 +++++++++
 templates/photo/view          |  86 ++++++++++++
 templates/picture/view        |   7 +
 templates/recent.rss          |  22 ++++
 templates/rhs                 |  33 +++++
 templates/static/1-s.gif      | Bin 0 -> 646 bytes
 templates/static/1.gif        | Bin 0 -> 649 bytes
 templates/static/2-s.gif      | Bin 0 -> 718 bytes
 templates/static/2.gif        | Bin 0 -> 694 bytes
 templates/static/3-s.gif      | Bin 0 -> 718 bytes
 templates/static/3.gif        | Bin 0 -> 695 bytes
 templates/static/4-s.gif      | Bin 0 -> 680 bytes
 templates/static/4.gif        | Bin 0 -> 668 bytes
 templates/static/5-s.gif      | Bin 0 -> 710 bytes
 templates/static/5.gif        | Bin 0 -> 692 bytes
 templates/static/6-s.gif      | Bin 0 -> 719 bytes
 templates/static/6.gif        | Bin 0 -> 708 bytes
 templates/static/7-s.gif      | Bin 0 -> 673 bytes
 templates/static/7.gif        | Bin 0 -> 672 bytes
 templates/static/8-s.gif      | Bin 0 -> 731 bytes
 templates/static/8.gif        | Bin 0 -> 713 bytes
 templates/static/9-s.gif      | Bin 0 -> 731 bytes
 templates/static/9.gif        | Bin 0 -> 704 bytes
 templates/static/memories.css | 141 ++++++++++++++++++++
 templates/static/memories.png | Bin 0 -> 38516 bytes
 templates/static/upload.js    |  82 ++++++++++++
 templates/systemtag/list      |  36 +++++
 templates/systemtag/view      |  14 ++
 templates/tag/list            |  36 +++++
 templates/tag/list_js         |   1 +
 templates/tag/view            |  28 ++++
 templates/tagcloud            |   4 +
 templates/test                |   2 +
 templates/user/album_list     |  41 ++++++
 templates/user/list           |  25 ++++
 templates/user/view           |   7 +
 68 files changed, 1913 insertions(+)
 create mode 100644 Changes
 create mode 100644 Memories.pm
 create mode 100644 Memories/Album.pm
 create mode 100644 Memories/Comment.pm
 create mode 100644 Memories/Config.pm
 create mode 100644 Memories/DBI.pm
 create mode 100644 Memories/Photo.pm
 create mode 100644 Memories/SystemTag.pm
 create mode 100644 Memories/Tag.pm
 create mode 100644 Memories/User.pm
 create mode 100644 README
 create mode 100644 memories.sql
 create mode 100644 tag_dates
 create mode 100644 templates/album/denied
 create mode 100644 templates/album/list
 create mode 100644 templates/album/view
 create mode 100644 templates/album_adder
 create mode 100644 templates/calendar
 create mode 100644 templates/custom/list
 create mode 100644 templates/footer
 create mode 100644 templates/frontpage
 create mode 100644 templates/header
 create mode 100644 templates/login_box
 create mode 100644 templates/macros
 create mode 100644 templates/memories.css
 create mode 100644 templates/memories.png
 create mode 100644 templates/nav
 create mode 100644 templates/pager
 create mode 100644 templates/photo/comment
 create mode 100644 templates/photo/exif
 create mode 100644 templates/photo/recent
 create mode 100644 templates/photo/tagedit
 create mode 100644 templates/photo/upload
 create mode 100644 templates/photo/view
 create mode 100644 templates/picture/view
 create mode 100644 templates/recent.rss
 create mode 100644 templates/rhs
 create mode 100644 templates/static/1-s.gif
 create mode 100644 templates/static/1.gif
 create mode 100644 templates/static/2-s.gif
 create mode 100644 templates/static/2.gif
 create mode 100644 templates/static/3-s.gif
 create mode 100644 templates/static/3.gif
 create mode 100644 templates/static/4-s.gif
 create mode 100644 templates/static/4.gif
 create mode 100644 templates/static/5-s.gif
 create mode 100644 templates/static/5.gif
 create mode 100644 templates/static/6-s.gif
 create mode 100644 templates/static/6.gif
 create mode 100644 templates/static/7-s.gif
 create mode 100644 templates/static/7.gif
 create mode 100644 templates/static/8-s.gif
 create mode 100644 templates/static/8.gif
 create mode 100644 templates/static/9-s.gif
 create mode 100644 templates/static/9.gif
 create mode 100644 templates/static/memories.css
 create mode 100644 templates/static/memories.png
 create mode 100644 templates/static/upload.js
 create mode 100644 templates/systemtag/list
 create mode 100644 templates/systemtag/view
 create mode 100644 templates/tag/list
 create mode 100644 templates/tag/list_js
 create mode 100644 templates/tag/view
 create mode 100644 templates/tagcloud
 create mode 100644 templates/test
 create mode 100644 templates/user/album_list
 create mode 100644 templates/user/list
 create mode 100644 templates/user/view

diff --git a/Changes b/Changes
new file mode 100644
index 0000000..de9c121
--- /dev/null
+++ b/Changes
@@ -0,0 +1,9 @@
+1.1 - Mon Oct 31 23:59:52 GMT 2005
+
+    - RSS feeds available from [%base%]/recent.rss
+    - Javascript suggestion of tags
+    - Calendaring and system tags
+    - Visual cleanups
+    - Concept of "enclosing tag" as well as "inside this tag"
+    - Minor fixes (zap cache on upload, URI escaping, etc.)
+    - Pager uses gifs
diff --git a/Memories.pm b/Memories.pm
new file mode 100644
index 0000000..33fbf40
--- /dev/null
+++ b/Memories.pm
@@ -0,0 +1,148 @@
+package Memories;
+use strict;
+use HTML::TagCloud;
+use URI;
+use Maypole::Application qw(Upload Authentication::UserSessionCookie
+-Debug);
+use Memories::Config;
+use Memories::DBI;
+use Memories::Photo;
+use Memories::Comment;
+use Memories::Tag;
+use Memories::SystemTag;
+use Memories::User;
+use Memories::Album;
+use URI::Escape;
+use Calendar::Simple;
+
+Memories->config->auth->{ user_field } = "name";
+Memories->config->model("Maypole::Model::CDBI::Plain");
+Memories->setup([qw/ Memories::Photo Memories::User Memories::Tag
+Memories::Album Memories::SystemTag/]);
+
+sub message {
+    my ($self, $message) = @_;
+    push @{$self->{template_args}{messages}}, $message;
+}
+
+sub additional_data { 
+    my $r = shift;
+    if ($r->params->{view_cal}) { 
+        $r->{template_args}{view_cal} = eval {
+            Time::Piece->strptime($r->{params}{view_cal}, "%Y-%m-%d") }; 
+    }
+    $r->{template_args}{now} = Time::Piece->new;
+}
+
+use Maypole::Constants;
+sub authenticate {
+   my ($self, $r) = @_;
+   return DECLINED if $self->path =~/static|store/; # XXX
+   $r->get_user;
+   return OK; 
+}
+
+
+use Cache::SharedMemoryCache;
+my %cache_options = ( 'namespace' => 'MemoriesStuff',
+                   'default_expires_in' => 600 );
+my $cache =
+   new Cache::SharedMemoryCache( \%cache_options ) or
+     croak( "Couldn't instantiate SharedMemoryCache" );
+
+sub zap_cache { $cache->Clear }
+use Storable qw(freeze); use MIME::Base64;
+sub do_cached {
+    my ($self, $codeblock,$arg) = @_;
+    my $key = 0+$codeblock; if ($arg) { $key .=":".encode_base64(freeze(\$arg));  }
+    my $c = $cache->get(0+$codeblock); return @$c if $c;
+    my @stuff = $codeblock->($arg);
+    $cache->set(0+$codeblock, [ @stuff ]);
+    return @stuff;
+}
+
+sub _recent_uploads { Memories::Photo->search_recent() }
+
+sub recent_uploads { shift->do_cached(\&_recent_uploads) }
+sub tagcloud { shift->do_cached(\&_tagcloud) }
+
+sub _tagcloud {
+    my $cloud = HTML::TagCloud->new();
+    my $base = Memories->config->uri_base."tag/view/";
+    for my $tagging (Memories::Tagging->search_summary) {
+        my $name = $tagging->tag->name;
+        $cloud->add($name,
+            $base.uri_escape($name),
+            $tagging->{count}
+        )
+    }
+    $cloud
+}
+
+sub calendar {
+    # shift->do_cached(\&_calendar, shift ) }
+#sub _calendar {
+    my $self = shift;
+    my $arg = shift;
+    my ($y, $m) = split /-/, ($arg || Time::Piece->new->ymd);
+    my @m = Calendar::Simple::calendar($m, $y);
+    my @month;
+    foreach my $week (@m) {
+        my @weekdays;
+        foreach my $day (@$week) {
+                my $d = { day => $day };
+                if ($day) {
+                    my $tag = "date:$y-$m-".sprintf("%02d", $day);
+                    my ($x) = Memories::SystemTag->search(name => $tag);
+                    if ($x) { $d->{tag} = "/system_tag/view/$tag" }
+                }
+                push(@weekdays, $d);
+        }
+        push(@month, \@weekdays);
+    }
+    return \@month;
+}
+
+# THIS IS A HACK
+
+use Time::Seconds;
+sub Time::Piece::next_month {
+    my $tp = shift;
+    my $month = $tp + ONE_MONTH;
+    return if $month > Time::Piece->new;
+    return $month
+}
+sub Time::Piece::prev_month {
+    my $tp = shift;
+    my $month = $tp - ONE_MONTH;
+    return $month
+}
+
+
+sub tag_select {
+    my ($r, $tags, $photos) = @_;
+    # XXX only affects current page
+    my %counter;
+    for (map {$_->tags} @$photos) { 
+        $counter{$_->name}++; 
+    } 
+    delete $counter{$_->name} for @$tags;
+    my @super;
+
+    my $cloud = HTML::TagCloud->new();
+    my $base = $r->config->uri_base.$r->path."/";
+    my $tags;
+    for my $name (sort {$a cmp $b} keys %counter) {
+        if ($counter{$name} == @$photos) {
+            push @super, $name;
+        } else {
+            $cloud->add($name, $base.uri_escape($name), $counter{$name});
+            $tags++;
+        }
+    }
+    my %res;
+    if (@super) { $res{super} = \@super }
+    if ($tags) { $res{cloud} = $cloud }
+    \%res;
+}
+1;
diff --git a/Memories/Album.pm b/Memories/Album.pm
new file mode 100644
index 0000000..b4f869d
--- /dev/null
+++ b/Memories/Album.pm
@@ -0,0 +1,77 @@
+package Memories::Album;
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+__PACKAGE__->columns(Essential => qw/id name user privacy/);
+Memories::Album->has_a(user => "Memories::User");
+Memories::User->has_many(albums => "Memories::Album");
+
+sub view :Exported {
+    my ($self, $r) = @_;
+    my $album = $r->objects->[0];
+    if ($album->privacy && $album->user != $r->user) {
+        $r->template("denied"); return;
+    }
+    $r->template_args->{photos} = [ $album->photos ];
+}
+
+sub list :Exported {
+    my ($self, $r) = @_;
+    my $page = $r->{params}{page} || 1;
+    my $pager = Memories::Album->pager(
+        Memories->config->{photos_per_page}, $page);
+    $r->{objects} = [$pager->search(privacy => 0)];
+    $r->{template_args}{pager} = $pager;
+}
+
+sub edit :Exported {
+    my ($self, $r) = @_;
+    use Data::Dumper; warn Dumper($r->{params});
+    my $album;
+    if ($r->{params}{album}) { # We're adding to an album
+        $album = $self->retrieve($r->{params}{album});
+        if (!$album or $album->user != $r->user) { 
+            $r->template("denied"); return;
+        }
+        for (map /(\d+)/,grep /add\d+/, keys %{$r->{params}}) {
+            Memories::AlbumEntry->create({
+                    album => $album->id,
+                    photo => $_
+                });
+        }
+    } else {
+        $album = $r->{objects}[0];
+        if (!$album or $album->user != $r->user) { 
+            $r->template("denied"); return;
+        }
+        for (map /(\d+)/,grep /delete\d+/, keys %{$r->{params}}) {
+            my ($ae) = Memories::AlbumEntry->search({
+                    album => $album->id,
+                    photo => $_
+                });
+            $ae->delete if $ae;
+        }
+    }
+    $r->objects([ $album ]);
+    $r->template("view"); $self->view($r);
+}
+
+package Memories::AlbumEntry;
+use base qw(Memories::DBI);
+__PACKAGE__->table("album_entry");
+__PACKAGE__->columns(TEMP => qw/count/);
+__PACKAGE__->columns(Essential => qw/id album photo/);
+__PACKAGE__->set_sql(summary => qq/
+SELECT  id, album, count(*) AS count
+FROM album_entry;
+GROUP BY album
+ORDER BY count DESC
+LIMIT 50
+    /);
+Memories::AlbumEntry->has_a("photo" => "Memories::Photo");
+Memories::AlbumEntry->has_a("album" => "Memories::Album");
+
+Memories::Photo->has_many(albums => ["Memories::AlbumEntry" => "album"]);
+Memories::Photo->has_many(albumentries => "Memories::AlbumEntry");
+Memories::Album->has_many(photos => ["Memories::AlbumEntry" => "photo"] );
+Memories::Album->has_many(albumentries => "Memories::AlbumEntry");
+
+1;
diff --git a/Memories/Comment.pm b/Memories/Comment.pm
new file mode 100644
index 0000000..2b7f0ca
--- /dev/null
+++ b/Memories/Comment.pm
@@ -0,0 +1,7 @@
+package Memories::Comment;
+use base qw(Memories::DBI);
+__PACKAGE__->columns(Essential => qw/id name photo/);
+__PACKAGE__->columns(Others => qw/content/);
+Memories::Comment->has_a("photo" => "Memories::Photo");
+
+1;
diff --git a/Memories/Config.pm b/Memories/Config.pm
new file mode 100644
index 0000000..f874eff
--- /dev/null
+++ b/Memories/Config.pm
@@ -0,0 +1,55 @@
+package Memories::Config;
+# PATHS AND URLS
+
+# This parameter should be the external address of your Memories
+# installation
+Memories->config->uri_base("http://memories.simon-cozens.org/");
+
+# This is where your templates will live.
+Memories->config->{template_root} = "/home/simon/maypole-sites/memories/templates";
+
+# Here is where uploaded photos will be stored. Your web server user
+# should own this directory.
+Memories->config->{data_store} = "/web/photostore/";
+
+# You also need to configure your web server so that it serves files out
+# of the data store; this URL should be where that data store directory
+# is exposed on the web.
+Memories->config->{data_store_external} = "http://memories.simon-cozens.org/store/";
+
+# Your database server: the first part should always be "dbi"; the
+# second, the name of the DBD driver you're using (usually mysql unless
+# you want to do your own thing); the final part, the name of the
+# database.
+#
+# Initialize this database from memories.sql and give www-data (or
+# equivalent) read/write access to all tables.
+Memories->config->{dsn} = "dbi:mysql:memories";
+
+# SESSION MANAGEMENT
+#
+# The name of any cookies this application should give out
+Memories->config->{auth}{cookie_name} = "memories";
+
+# Session file storage. Create these directories and have them owned by
+# www-data
+Memories->config->{auth}{session_args} = {
+        Directory => "/var/lib/memories/sessions",
+        LockDirectory => "/var/lib/memories/sessionlock",
+    };
+
+# DISPLAY PARAMETERS
+#
+# It's OK to leave these as they are.
+# 
+# The size of thumbnails to generate
+Memories->config->{thumb_size} = "90x90";
+
+# Sizes you want to scale to. "full" is special.
+Memories->config->{sizes} = 
+    [ qw/ 150x100 300x200 640x480 800x600 1024x768 1280x1024 full /];
+
+# Number of photos on a page. It's best if this is a multiple of three
+Memories->config->{photos_per_page} = 21;
+
+1;
diff --git a/Memories/DBI.pm b/Memories/DBI.pm
new file mode 100644
index 0000000..4d3595d
--- /dev/null
+++ b/Memories/DBI.pm
@@ -0,0 +1,7 @@
+package Memories::DBI;
+use base qw(Class::DBI::mysql);
+Memories::DBI->connection(Memories->config->{dsn});
+Memories::DBI->autoupdate(1);
+use Carp qw(carp);
+
+1;
diff --git a/Memories/Photo.pm b/Memories/Photo.pm
new file mode 100644
index 0000000..288ac4a
--- /dev/null
+++ b/Memories/Photo.pm
@@ -0,0 +1,239 @@
+package Memories::Photo;
+use strict;
+use Carp qw(cluck confess);
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+use Time::Piece;
+use constant PAGER_SYNTAX => "LimitXY";
+__PACKAGE__->columns(Essential => qw(id title uploader uploaded x y));
+__PACKAGE__->columns(TEMP => qw/exif_object/);
+__PACKAGE__->set_sql(recent => q{
+SELECT __ESSENTIAL__
+FROM __TABLE__
+ORDER BY uploaded DESC
+LIMIT 4
+});
+
+__PACKAGE__->has_many(comments => "Memories::Comment");
+__PACKAGE__->has_a(uploader => "Memories::User");
+__PACKAGE__->has_a(uploaded => "Time::Piece",
+    inflate => sub { Time::Piece->strptime(shift, "%Y-%m-%d %H:%M:%S") },
+    deflate => 'datetime',
+);
+
+sub do_upload :Exported {
+    my ($self, $r) = @_;
+    my %upload = $r->upload("photo");
+
+    # XXX Stop anonymous uploads!
+    my $photo = $self->create({
+        uploader => $r->user,
+        uploaded => Time::Piece->new(),
+        title => ($r->params->{title} || $upload{filename})
+    });
+
+    # Dump content
+    if (!open OUT, ">". $photo->path("file")) {
+        die "Can't write ".$photo->path("file")." because $!";
+    }
+    # XXX Check it's a JPEG, etc.
+    # XXX Unzip ZIP file
+    print OUT $upload{content};
+    close OUT;
+    my ($x, $y) = dim(image_info($photo->path));
+    $photo->x($x); $photo->y($y);
+
+    # Rotate?
+    $photo->unrotate();
+
+    $photo->make_thumb;
+    $photo->add_tags($r->{params}{tags});
+    Memories->zap_cache();
+
+    # Add system tags here
+    my $tag = "date:".$photo->shot->ymd;
+    $photo->add_to_system_tags({tag => Memories::SystemTag->find_or_create({name =>$tag}) });
+
+    # Set it up to go again
+    $r->objects([$photo]);
+    $r->template("view");
+    $r->message("Thanks for the upload! ".
+        ($r->{params}{tags} ? "" 
+        : "Don't forget to <a href=\"?".$r->config->uri_base."photo/view/".$photo->id."?active=tagedit\">tag your photo</a>"
+        )
+    ); 
+}
+
+sub upload :Exported {}
+
+use Class::DBI::Plugin::Pager;
+use Class::DBI::Plugin::AbstractCount;
+
+sub recent :Exported {
+    my ($self, $r) = @_;
+    my $page = $r->params->{page} || 1;
+    my $pager = $self->pager(
+        per_page => Memories->config->{photos_per_page}, 
+        page => $page,
+        syntax => PAGER_SYNTAX,
+        order_by => "uploaded desc"
+    );
+    $r->objects([$pager->retrieve_all ]);
+    $r->{template_args}{pager} = $pager;
+}
+
+sub add_comment :Exported {
+    my ($self, $r, $photo) = @_;
+    $r->template("view");
+    $r->objects->[0]->add_to_comments({
+        name => $r->params->{name},
+        content => $r->params->{content}
+    });
+}
+
+sub format { 
+    "jpg" # For now
+} 
+
+use Cache::MemoryCache;
+use Image::Info qw(dim image_info);
+use Image::ExifTool;
+my $cache = new Cache::MemoryCache( { 'namespace' => 'MemoriesInfo' });
+
+sub unrotate {
+    my $self = shift;
+    my $orient = $self->exif_info->{EXIF}->{Orientation};
+    return if $orient !~/Rotate (\d+)/i;
+    my $steps = $1/90;
+    my $img = Image::Imlib2->load($self->path("file"));
+    $img->image_orientate($steps);
+    $img->save($self->path("file"));
+}
+
+sub exif_info {
+    my $self = shift;
+    my $info = $self->exif_object;
+    return $info if $info;
+    # Get it from the Cache
+    if (!($info = $cache->get($self->id))) {
+        # Create it
+        $info = $self->_exif_info;
+        $cache->set($self->id, $info);
+    }
+    $self->exif_object($info);
+    $info;
+}
+
+sub _exif_info {
+    my $exifTool = new Image::ExifTool;
+    $exifTool->Options(Group0 => ['EXIF', 'MakerNotes', 'Composite']);
+    my $info = $exifTool->ImageInfo(shift->path);
+    my $hash = {};
+    foreach my $tag ($exifTool->GetFoundTags('Group0')) {
+         my $group = $exifTool->GetGroup($tag);
+         my $val = $info->{$tag};
+         next if ref $val eq 'SCALAR';
+         next if $val =~ /^[0\s]*$/;
+         $hash->{$group}->{$exifTool->GetDescription($tag)} = $val;
+    }
+    return $hash;
+}
+
+# XXX Cache this
+sub dimensions { join "x", $_[0]->x, $_[0]->y }
+
+sub is_bigger {
+    my ($self, $size) = @_;
+    return 1 if $size eq "full";
+    my ($w, $h) = ($self->x, $self->y);
+    my ($w2, $h2) = split /x/, $size;
+    return 1 if $w > $w2 or $h > $h2;
+    return 0;
+}
+
+sub sized_url { # Use this rather than ->path from TT
+    my ($self, $size) = @_;
+    my $url = Memories->config->{data_store_external};
+    my $resized = Memories->config->{sizes}->[$size];
+    if (!$resized) { cluck "Asked for crazy size $size"; return; }
+    if ($resized eq "full") { return $self->path("url") }
+    $self->scale($resized) 
+        unless -e $self->path( file => $resized );
+    return $self->path(url => $resized);
+}
+
+sub path { 
+    my ($self, $is_url, $scale) = @_;
+    my $path =
+        Memories->config->{$is_url eq "url" ? "data_store_external" : "data_store" };
+    if ($scale) { $path .= "$scale/" }
+    # Make dir if it doesn't exist, save trouble later
+    use File::Path;
+    if ($is_url ne "url") {mkpath($path);}
+    $path .= $self->id.".".$self->format;
+    return $path;
+}
+
+sub thumb_url { shift->path(url => Memories->config->{thumb_size}); }
+sub make_thumb { shift->scale(Memories->config->{thumb_size}, 1); }
+
+use Image::Imlib2;
+sub scale {
+    my ($self, $scale, $swap) = @_;
+    my ($x, $y) = split /x/, $scale;
+    # Find out smaller axis
+    my ($cur_x, $cur_y) = ($self->x, $self->y);
+    if (!$swap) {
+        if ($cur_x < $cur_y) { $y = 0 } else { $x = 0 }
+    } else {
+        if ($cur_x > $cur_y) { $y = 0 } else { $x = 0 }
+    }
+    my $img = Image::Imlib2->load($self->path("file"));
+    unless ($img) {
+        cluck "Couldn't open image file ".$self->path("file");
+        return;
+    }
+    $img = $img->create_scaled_image($x, $y);
+    $img->image_set_format("jpeg");
+    my $file = $self->path( file => $scale );
+    $img->save($file);
+    if ($!) {
+        cluck "Couldn't write image file $file ($!)"; 
+        return;
+    }
+}
+
+use Text::Balanced qw(extract_multiple extract_quotelike);
+sub edit_tags :Exported {
+    my ($self, $r) = @_;
+    my $photo = $r->objects->[0];
+    my %params = %{$r->params};
+    for (keys %params) { 
+        next unless /delete_(\d+)/;
+        my $tagging = Memories::Tagging->retrieve($1) or next;
+        next unless $tagging->photo->id == $photo->id;
+        $tagging->delete;
+    }
+    $photo->add_tags($params{newtags});
+    $r->template("view");
+}
+
+sub add_tags {
+    my ($photo, $tagstring) = @_;
+
+    for my $tag (map { s/^"|"$//g; $_} extract_multiple(lc $tagstring, [ \&extract_quotelike, qr/([^\s]+)/ ], undef,1)) {
+        $photo->add_to_tags({tag => Memories::Tag->find_or_create({name =>$tag}) })
+    }
+}
+
+sub shot {
+  my $self = shift;
+  my $exif = $self->exif_info->{EXIF};
+  my ($dt) =
+    grep {$_ and /[^ 0:]/} 
+        ($exif->{ 'Shooting Date/Time' },
+         $exif->{ 'Date/Time Of Digitization' },
+         $exif->{ 'Date/Time Of Last Modification' });
+  if (!$dt) { return $self->uploaded }
+  return Time::Piece->strptime($dt, "%Y:%m:%d %T") || $self->uploaded;
+}
+1;
diff --git a/Memories/SystemTag.pm b/Memories/SystemTag.pm
new file mode 100644
index 0000000..d4f8439
--- /dev/null
+++ b/Memories/SystemTag.pm
@@ -0,0 +1,62 @@
+package Memories::SystemTag;
+use strict;
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+__PACKAGE__->columns(Essential => qw/id name/);
+__PACKAGE__->table("system_tag");
+
+Memories::Photo->set_sql(sorted_by_system_tag => q/
+SELECT photo.id as id, title, uploader, uploaded, x, y
+FROM photo, system_tag, system_tagging
+WHERE system_tagging.photo = photo.id
+    AND system_tagging.tag = system_tag.id
+    AND system_tag.id = ?
+ORDER BY photo.uploaded DESC
+/
+);
+sub view :Exported {
+    my ($self, $r) = @_;
+    my $tag;
+    my $page = $r->params->{page} || 1;
+    my $pager = Class::DBI::Pager::_pager("Memories::Photo",
+        Memories->config->{photos_per_page}, $page);
+    $r->{template_args}{pager} = $pager;
+
+    if (!$r->objects) {
+        $tag = $self->search(name => $r->{args}->[0])->first;
+    } else {
+        $tag = $r->objects->[0]; # Should hardly happen
+    }
+    $r->{template_args}{tag} = $tag;
+    $r->{template_args}{tags} = [$tag]; # For selector
+    $r->{template_args}{photos} =
+        [$pager->search_sorted_by_system_tag($tag->id)];
+}
+
+package Memories::SystemTagging;
+use base qw(Memories::DBI);
+use Class::DBI::Pager;
+__PACKAGE__->table("system_tagging");
+__PACKAGE__->columns(TEMP => qw/count/);
+__PACKAGE__->columns(Essential => qw/id tag photo/);
+__PACKAGE__->set_sql(summary => qq/
+SELECT  id, system_tag, count(*) AS count
+FROM system_tagging
+GROUP BY system_tag
+ORDER BY count DESC
+LIMIT 50
+    /);
+__PACKAGE__->set_sql(all => qq/
+SELECT  id, tag, count(*) AS count
+FROM system_tagging
+GROUP BY system_tag
+ORDER BY count DESC
+    /);
+Memories::SystemTagging->has_a("photo" => "Memories::Photo");
+Memories::SystemTagging->has_a("tag" => "Memories::SystemTag");
+
+Memories::Photo->has_many(system_tags => ["Memories::SystemTagging" => "system_tag"]);
+Memories::Photo->has_many(system_taggings => "Memories::SystemTagging");
+Memories::SystemTag->has_many(photos => ["Memories::SystemTagging" => "photo"] );
+Memories::SystemTag->has_many(system_taggings => "Memories::SystemTagging");
+
+1;
diff --git a/Memories/Tag.pm b/Memories/Tag.pm
new file mode 100644
index 0000000..bcaa6c0
--- /dev/null
+++ b/Memories/Tag.pm
@@ -0,0 +1,100 @@
+package Memories::Tag;
+use strict;
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+__PACKAGE__->columns(Essential => qw/id name/);
+
+Memories::Photo->set_sql(sorted_by_tag => q/
+SELECT photo.id as id, title, uploader, uploaded, x, y
+FROM photo, tag, tagging
+WHERE tagging.photo = photo.id
+    AND tagging.tag = tag.id
+    AND tag.id = ?
+ORDER BY photo.uploaded DESC
+/
+);
+
+sub view :Exported {
+    my ($self, $r) = @_;
+    my $tag;
+    my $page = $r->params->{page} || 1;
+    my $pager = Class::DBI::Pager::_pager("Memories::Photo",
+        Memories->config->{photos_per_page}, $page);
+    $r->{template_args}{pager} = $pager;
+
+    if (@{$r->args} > 1) { # This is actually an n-level search
+        $self->multi_search($r);
+    } else {
+        if (!$r->objects) {
+            $tag = $self->search(name => $r->{args}->[0])->first;
+        } else {
+            $tag = $r->objects->[0]; # Should hardly happen
+        }
+        $r->{template_args}{tag} = $tag;
+        $r->{template_args}{tags} = [$tag]; # For selector
+        $r->{template_args}{photos} =
+            [$pager->search_sorted_by_tag($tag->id)];
+    }
+}
+
+sub multi_search {
+    my ($self, $r) = @_;
+    my $counter = "tagaaa";
+    my @tags;
+    for (@{$r->{args}}) {
+        my $tag = $self->search(name => $_)->first;
+        if (!$tag) { return }
+        push @tags, { tag => $tag, id => $tag-> id, counter => $counter++ };
+    }
+    my $sql = "select photo.id as id, photo.title as title, uploader, uploaded, x, y
+from photo, ". (join ",", map{ "tagging ".$_->{counter} } @tags).
+" where ". (join " AND ", map { "$_->{counter}.tag=$_->{id} and photo.id = $_->{counter}.photo" } @tags);
+
+$sql .= " order by photo.uploaded desc";
+    my $sth = $self->db_Main->prepare($sql);
+    $r->{template_args}{photos} = [ $r->{template_args}{pager}->sth_to_objects($sth) ];
+    $sth->finish;
+    $r->{template_args}{tags} = [ map { $_->{tag} } @tags ];
+}
+
+sub list :Exported {
+    my ($self, $r) = @_;
+    my $page = $r->params->{page} || 1;
+    my $pager = Memories::Tagging->pager(
+        Memories->config->{photos_per_page}, $page
+    );
+    $r->{template_args}{pager} = $pager;
+    $r->objects([map {$_->tag} $pager->search_all]);
+}
+
+sub list_js :Exported {
+    my ($self, $r) = @_;
+    $r->objects([ $self->retrieve_all ]);
+}
+
+package Memories::Tagging;
+use base qw(Memories::DBI);
+use Class::DBI::Pager;
+__PACKAGE__->columns(TEMP => qw/count/);
+__PACKAGE__->columns(Essential => qw/id tag photo/);
+__PACKAGE__->set_sql(summary => qq/
+SELECT  id, tag, count(*) AS count
+FROM tagging
+GROUP BY tag
+ORDER BY count DESC
+LIMIT 50
+    /);
+__PACKAGE__->set_sql(all => qq/
+SELECT  id, tag, count(*) AS count
+FROM tagging
+GROUP BY tag
+ORDER BY count DESC
+    /);
+Memories::Tagging->has_a("photo" => "Memories::Photo");
+Memories::Tagging->has_a("tag" => "Memories::Tag");
+
+Memories::Photo->has_many(tags => ["Memories::Tagging" => "tag"]);
+Memories::Photo->has_many(taggings => "Memories::Tagging");
+Memories::Tag->has_many(photos => ["Memories::Tagging" => "photo"] );
+Memories::Tag->has_many(taggings => "Memories::Tagging");
+
+1;
diff --git a/Memories/User.pm b/Memories/User.pm
new file mode 100644
index 0000000..2fa82ca
--- /dev/null
+++ b/Memories/User.pm
@@ -0,0 +1,67 @@
+package Memories::User;
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+__PACKAGE__->columns(All => qw/id name password/);
+__PACKAGE__->has_many(photos => "Memories::Photo");
+
+sub register :Exported {
+    my ($class, $r) = @_;
+    my $login = $r->params->{name};
+    my $pass  = $r->params->{password};
+    $r->template("frontpage");
+    return if $r->user;
+
+    # Do we already exist?
+    if (!$login) { $r->template("login"); $r->message("You didn't enter a user name"); return; }
+    my ($user) = $class->search(name => $login);
+    if ($user) { $r->template("login"); $r->message("User name already exists"); return; }
+    $user = $class->create({name => $login, password => $pass });
+    $r->user($user, 0);
+    $r->login_user($user->id);
+
+}
+
+sub view :Exported {
+    my ($self, $r) = @_;
+    my $user = $r->objects->[0]; 
+    my $page = $r->params->{page} || 1;
+    my $pager = Class::DBI::Pager::_pager("Memories::Photo",
+        Memories->config->{photos_per_page}, $page); 
+    $r->{template_args}{photos} = [$pager->search(uploader =>
+    $user->id,{order_by => "uploaded desc"}) ];
+    $r->{template_args}{pager} = $pager;
+    $r->{template_args}{albums} = [$user->albums(privacy => 0)];
+}
+
+# Album support!
+
+sub edit_albums :Exported {
+    my ($self, $r) = @_;
+    $r->{template} = "view";
+    $self->view($r);
+    my $user = $r->objects->[0];
+    return unless $r->user and $r->user->id == $user->id;
+    if ($r->{params}{create}) {
+        $user->add_to_albums({
+            privacy => !!($r->{params}{new_privacy}),
+            name => $r->{params}{new_name}
+        });
+    } elsif ($r->{params}{changes}) {
+        for my $album ($user->albums) { #XXX
+            warn "Setting $album privacy to ".
+                $r->{params}{"privacy_".$album->id};
+            $album->privacy(!!$r->{params}{"privacy_".$album->id});
+        }
+    } else {
+        my @to_delete = map /(\d+)/,
+            grep /delete_\d+/, keys %{$r->{params}};
+        for (@to_delete) {
+            my $album = Memories::Album->retrieve($_);
+            if ($album and $album->user->id == $user->id) {
+                $album->delete
+            }
+        }
+    }
+    
+}
+
+1;
diff --git a/README b/README
new file mode 100644
index 0000000..abc3838
--- /dev/null
+++ b/README
@@ -0,0 +1,59 @@
+Updating from an earlier release? Read the bit at the bottom!
+
+Installing the Memories photo sharing application
+-------------------------------------------------
+
+First, Perl modules. This is the hard part. You will need:
+    Maypole (good luck)
+    Class::DBI
+    DBI
+    DBD::mysql
+    Class::DBI::mysql
+    Image::Info
+    Image::Imlib2 (requires libimlib2 and libimlib2-dev packages)
+    Time::Piece
+    Cache::Cache
+    Maypole::Plugin::Upload
+    Maypole::Plugin::Authentication::UserSessionCookie
+    HTML::TagCloud
+
+Apache mod_perl is recommended. Memories can also be run as a CGI
+application, but you're on your own.
+
+You will also need a MySQL database. Again, in theory other databases
+can be used, but in practice, you're on your own again.
+
+Configure Maypole/Config.pm to your site, and follow the instructions in
+there - it will require you to set other things up as well.
+
+Test that everything works:
+
+    perl -MMemories -e1
+
+If this produces no errors, you're good to configure Apache. I have
+Memories living in "/home/simon/maypole-sites/memories", and my photo
+storage in "/opt/store/", and so my configuration looks like this:
+
+    <Perl>
+        use lib qw( /home/simon/maypole-sites/memories/ );
+    </Perl>
+
+    PerlModule Memories
+    Alias /memories/static/ /home/simon/maypole-sites/memories/templates/static/
+    Alias /memories/store/ /opt/store/
+
+    <Location /memories>
+        PerlHandler Memories
+        SetHandler perl-script
+    </Location>
+
+Restart Apache, register yourself and get uploading!
+
+
+Updating Memories 1.0 to 1.1
+----------------------------
+
+1) Create the system_tags and system_taggings table as in memories.sql
+
+2) Run the tag_dates script.
+
diff --git a/memories.sql b/memories.sql
new file mode 100644
index 0000000..9ebe256
--- /dev/null
+++ b/memories.sql
@@ -0,0 +1,58 @@
+CREATE TABLE photo (
+    id integer not null auto_increment primary key,
+    title varchar(255),
+    uploader integer,
+    uploaded datetime,
+    x integer,
+    y integer
+);
+
+CREATE TABLE comment (
+    id integer not null auto_increment primary key,
+    name varchar(255),
+    content text,
+    photo integer
+);
+
+CREATE TABLE user (
+    id integer not null auto_increment primary key,
+    name varchar(255),
+    password varchar(255)
+);
+
+CREATE TABLE tag (
+    id integer not null auto_increment primary key,
+    name varchar(255)
+);
+
+CREATE TABLE tagging (
+    id integer not null auto_increment primary key,
+    tag integer,
+    photo integer
+);
+
+CREATE TABLE album (
+    id integer not null auto_increment primary key,
+    name varchar(255),
+    user integer,
+    privacy integer
+);
+
+CREATE TABLE album_entry (
+    id integer not null auto_increment primary key,
+    album integer,
+    photo integer
+);
+
+CREATE TABLE system_tag (
+    id integer not null auto_increment primary key,
+    name varchar(255)
+);
+
+CREATE TABLE system_tagging (
+    id integer not null auto_increment primary key,
+    tag integer,
+    photo integer
+);
+
+
diff --git a/tag_dates b/tag_dates
new file mode 100644
index 0000000..e44af81
--- /dev/null
+++ b/tag_dates
@@ -0,0 +1,10 @@
+use Memories;
+my $it = Memories::Photo->retrieve_all;
+
+my $thing = $it->first;
+do {
+    print $thing->title, "   $tag\n";
+    my $tag = "date:".$thing->shot->ymd;
+    $thing->add_to_system_tags({tag => Memories::SystemTag->find_or_create({name
+    =>$tag}) });
+} while $thing = $it->next;
diff --git a/templates/album/denied b/templates/album/denied
new file mode 100644
index 0000000..7b641a9
--- /dev/null
+++ b/templates/album/denied
@@ -0,0 +1,7 @@
+[% INCLUDE header %]
+<div class="warning">
+This album has been marked private, and you do not have permission to
+view it.
+</div>
+
+[% INCLUDE footer; %]
diff --git a/templates/album/list b/templates/album/list
new file mode 100644
index 0000000..0229289
--- /dev/null
+++ b/templates/album/list
@@ -0,0 +1,25 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+
+<table class="userlist">
+[% WHILE objects.size > 0 %]
+<tr>
+    [% SET minilist = objects.splice(0,3) %]
+    [% FOR album = minilist %]
+        <td>
+        <a href="[%base%]/album/view/[%album.id%]">[% album %]<br/>
+        <img src="[% album.photos.last.thumb_url |uri%]"></a><br/>
+        <span class="info">
+            [%album.photos.size %] 
+        photo[%-"s" IF album.photos.size != 1 %]
+        <br>
+        <a
+        href="[%base%]/user/view/[%album.user.id%]">[%album.user%]</a>
+        </span>
+        </td>
+    [% END %] 
+</tr>
+[% END %]
+</table>
+[% INCLUDE pager %]
+[% INCLUDE footer %]
diff --git a/templates/album/view b/templates/album/view
new file mode 100644
index 0000000..a8ad02d
--- /dev/null
+++ b/templates/album/view
@@ -0,0 +1,9 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+<h1> [% album.name %] </h1>
+[% IF album.user == request.user %]
+    [% view_page_of(photos, "delete") %]
+[% ELSE %]
+[% view_page_of(photos) %]
+[% END %]
+[% INCLUDE footer %]
diff --git a/templates/album_adder b/templates/album_adder
new file mode 100644
index 0000000..2c3db73
--- /dev/null
+++ b/templates/album_adder
@@ -0,0 +1,9 @@
+[% IF request.user.albums.size > 0 %]
+    Add to:
+    <select name="album">
+    [% FOR album = request.user.albums %]
+        <option value="[%album.id%]"> [% album %] </option>
+    [% END %]
+    </select>
+    <input type="submit" value="Add" name="Add">
+[% END %]
diff --git a/templates/calendar b/templates/calendar
new file mode 100644
index 0000000..700072f
--- /dev/null
+++ b/templates/calendar
@@ -0,0 +1,43 @@
+<div align="center" style="border: 1px solid black; background: #eee">
+[% IF request.action == "view" %]
+    [% SET shot = photo.shot %]
+[% END %]
+[% SET date = view_cal || shot || now %]
+[% SET imp_date = shot || now %]
+[% SET next = date.next_month %]
+[% SET prev = date.prev_month %]
+[% SET calendar = request.calendar(date.ymd) %]
+<table class="calendar">
+    <tr>
+        <th> <a href="?view_cal=[%prev.ymd%]">&laquo; </a></th>
+        <th colspan="5"> 
+            [% date.strftime("%Y-%m") %] 
+        </th>
+        <th> [% IF next %]
+            <a href="?view_cal=[%next.ymd%]">&raquo; </a>
+            [% END %]
+        </th>
+    </tr>
+    <tr>
+    <td>S </td><td> M </td><td>
+    T</td><td>W</td><td>T</td><td>F</td><td>S</td>
+    </tr>
+[% FOR week = calendar %]
+    <tr>
+
+[% FOR day = week %]
+    [% IF day.tag %]
+        [% IF shot AND day.day == imp_date.mday %]
+            <td class="caltoday"> 
+        [% ELSE %]
+            <td class="caltagged"> 
+        [% END %]
+        <a href="[%base%][%day.tag%]?view_cal=[%date.ymd%]">[% day.day %]</a> </td>
+    [% ELSE %]
+    <td class="calempty"> [% day.day %] </td>
+    [% END %]
+[% END %]
+    </tr>
+[% END %]
+</table>
+</div>
diff --git a/templates/custom/list b/templates/custom/list
new file mode 100644
index 0000000..3dd50b3
--- /dev/null
+++ b/templates/custom/list
@@ -0,0 +1,20 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+
+<table class="userlist">
+[% WHILE objects.size > 0 %]
+<tr>
+    [% SET minilist = objects.splice(0,3) %]
+    [% FOR object = minilist %]
+        <td>
+        <a href="[%base%]/object/view/[%object.id%]">[% object %]<br/>
+        <img src="[% object.photos.last.thumb_url |uri%]"></a><br/>
+        <span class="info">
+            [%object.photos.size %] 
+        photo[%-"s" IF object.photos.size != 1 %]</span>
+        </td>
+    [% END %] 
+</tr>
+[% END %]
+</table>
+[% INCLUDE footer %]
diff --git a/templates/footer b/templates/footer
new file mode 100644
index 0000000..64186ac
--- /dev/null
+++ b/templates/footer
@@ -0,0 +1,9 @@
+</div>
+</td>
+    <td id="rhs" valign="top">
+        [% INCLUDE rhs %]
+    </td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/templates/frontpage b/templates/frontpage
new file mode 100644
index 0000000..2b36f1e
--- /dev/null
+++ b/templates/frontpage
@@ -0,0 +1,35 @@
+[% INCLUDE header %]
+<h1> Welcome to Memories </h1>
+
+<p>
+ Memories is a site where you can upload and share your photos of
+ college life with your friends.
+</p>
+<p>
+ To view other people's photos, look at the <a
+ href="[%base%]/user/list">user list</a> or the <a
+ href="[%base%]/album/list">album list</a>.
+</p>
+<p>
+ Alternatively, Memories supports tagging photos with names, places, or
+ other descriptive terms. Browse based on the tags on the right, or look
+ at the full <a href="[%base%]/tag/list">tag list</a>.
+</p>
+<hr/>
+[% IF request.user %]
+<p>
+Now that you're logged in, you can start <a
+href="[%base%]/photo/upload">uploading photos</a>. Create some albums or
+check out what you've uploaded at <a
+href="[%base%]/user/view/[%request.user.id%]">your home page</a>.
+</p>
+[% ELSE %]
+<p>
+To get started uploading your own photos, you'll need to <a
+href="[%base%]/login_box">log in</a>. If you
+don't have an account, just go to the log in page anyway, choose a
+username and password, and click "Register". So long as nobody else has that name,
+we'll create an account for you immediately.
+</p>
+[% END %]
+[% INCLUDE footer %]
diff --git a/templates/header b/templates/header
new file mode 100644
index 0000000..8dc15a6
--- /dev/null
+++ b/templates/header
@@ -0,0 +1,23 @@
+<html>
+<head>
+    <title> Memories - ANCC Photo Sharing </title>
+    <link title="Maypole" href="[%base%]/static/memories.css" type="text/css" rel="stylesheet"/>
+[% IF request.params.active == "tagedit" %]
+    <script type="text/javascript" src="[%base%]/tag/list_js"></script>
+    <script type="text/javascript" src="[%base%]/static/upload.js"></script>
+</head>
+<body onload="init()">
+[% ELSE %]
+</head>
+<body>
+[% END %]
+[% INCLUDE nav %]
+<table width="100%">
+    <tr>
+    <td valign="top">
+    [% IF messages %]
+    <div class="messages">
+    <ul> [% FOR m = messages %] <li> [%m%] </li> [% END %]
+    </ul></div>
+    [% END %]
+   <div id="main">
diff --git a/templates/login_box b/templates/login_box
new file mode 100644
index 0000000..b875129
--- /dev/null
+++ b/templates/login_box
@@ -0,0 +1,34 @@
+    [% INCLUDE header %]
+
+    <div id="login">
+    [% IF request.user %]
+        Welcome, [% request.user.name %]
+    [% ELSE %]
+
+    [% IF login_error %]
+        <div class="error"> [% login_error %] </div>
+    [% END %]
+    <form method="post" action="[% base %]/user/register">
+    <fieldset>
+    <legend>Login or register as a new user</legend>
+        <table> <tr>
+            <td class="loginfield">
+            Username:
+            </td>
+            <td>
+	    <input name="name" type="text" />
+        </td>
+        </tr>
+        <tr> <td class="loginfield">
+	    Password:
+        </td><td>
+       	    <input name="password" type="password" />
+            </td></tr></table>
+        <input type="submit" name="login" value="Login"/>
+        <input type="submit" name="login" value="Register"/>
+    </fieldset>
+    </form>
+    [% END %]
+    </div>
+
+    [% INCLUDE footer %]
diff --git a/templates/macros b/templates/macros
new file mode 100644
index 0000000..f97cdd3
--- /dev/null
+++ b/templates/macros
@@ -0,0 +1,62 @@
+[% MACRO thumb(photo, album) BLOCK %]
+<table class="thumb">
+    <tr><td>
+        <a href="[%base%]/photo/view/[%photo.id%]">
+        <img src="[% photo.thumb_url |uri%]" alt="[%photo.title|html%]"/>
+        </a>
+        </td> </tr>
+    <tr><td> 
+        <a href="[%base%]/photo/view/[%photo.id%]">
+        <b>[% photo.title |html%] </b>
+        </a>
+        
+        </td></tr>
+    <tr><td> Uploaded by 
+        <a href="[%base%]/user/view/[%photo.uploader.id%]">
+            [% photo.uploader.name |html%]
+        </a><br/> at [% photo.uploaded %] </td></tr>
+        [% IF request.user %]
+    [% IF album == 1 %]
+        <tr><td> Add to album: <input type="checkbox" name="add[%photo.id%]" value="[%photo.id%]"> </td></tr>
+    [% ELSIF album == 2 %]
+        <tr><td> Delete from album: <input type="checkbox" name="delete[%photo.id%]" value="[%photo.id%]"> </td></tr>
+    [% END %]
+    [% END %]
+</table>
+[% END %]
+
+[% MACRO view_page_of(photos) BLOCK; %]
+[% IF request.table == "album" AND request.template == "view" %]
+[% SET editing_album = 1%]
+[% END %]
+[% IF editing_album %]
+<form action="[%base%]/album/edit/[%album.id%]" method="post">
+[% ELSE %]
+<form action="[%base%]/album/edit" method="post">
+[% END %]
+[% IF !photos OR ! photos.size %]
+<div class="warning">
+    This [% request.table %] is empty!
+</div>
+[% ELSE %]
+<table class="userlist">
+[% WHILE photos.size > 0 %]
+[% SET triple = photos.splice(0,3) %]
+    <tr>
+        [% FOR photo = triple %]
+        <td>
+        [% IF editing_album; thumb(photo, 2); ELSE; thumb(photo, 1); END %]
+        </td>
+        [% END %]
+    </tr>
+[% END %]
+</table>
+[% END %]
+[% IF editing_album %]
+<input type="submit" name="Delete" value="Delete">
+[% ELSE %]
+[% INCLUDE album_adder %]
+[% END %]
+[% INCLUDE pager %]
+</form>
+[% END %]
diff --git a/templates/memories.css b/templates/memories.css
new file mode 100644
index 0000000..ac5608e
--- /dev/null
+++ b/templates/memories.css
@@ -0,0 +1,8 @@
+body { background: #afa; }
+
+.recentuploads {
+    float:right;
+    background: #ddd;
+    padding: 10px;
+    border: 1px solid black;
+}
diff --git a/templates/memories.png b/templates/memories.png
new file mode 100644
index 0000000000000000000000000000000000000000..c602c08d01c3a33f7b67a03544c0b3ffffb605cd
GIT binary patch
literal 40186
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
b$DzRps3;JAe8i=N@$jfCYl3POEhGN}Hvcn<

literal 0
HcmV?d00001

diff --git a/templates/nav b/templates/nav
new file mode 100644
index 0000000..f42bb06
--- /dev/null
+++ b/templates/nav
@@ -0,0 +1,11 @@
+<div id="nav">
+<table width="100%"><tr><td align="left">
+<a href="[%base%]"><img src="[%base%]/static/memories.png"/></a>
+</td><td align="right">
+[% FOR photo = request.recent_uploads %]
+        <a href="[%base%]/photo/view/[%photo.id%]">
+        <img src="[% photo.thumb_url |uri%]" alt="[%photo.title|html%]"/>
+        </a>
+[% END %]
+</td></tr></table>
+</div>
diff --git a/templates/pager b/templates/pager
new file mode 100644
index 0000000..8ff1ed0
--- /dev/null
+++ b/templates/pager
@@ -0,0 +1,19 @@
+[% IF pager.last_page > 1 %]
+ [% FOREACH num = [pager.first_page .. pager.last_page] %]
+      [% IF num == pager.current_page %]
+          [% IF num < 10 %]
+            <img src="[%base%]/static/[%num%]-s.gif">
+          [% ELSE %]
+            [[% num %]]
+          [% END %]
+      [% ELSE %]
+      <a href="?page=[% num %]">
+          [% IF num < 10 %]
+            <img src="[%base%]/static/[%num%].gif">
+          [% ELSE %]
+            [[% num %]]
+          [% END %]
+      </a>
+      [% END %]
+[% END %]
+[% END %]
diff --git a/templates/photo/comment b/templates/photo/comment
new file mode 100644
index 0000000..498e5b6
--- /dev/null
+++ b/templates/photo/comment
@@ -0,0 +1,18 @@
+<div class="comments">
+[% FOR comment = photo.comments %]
+    <div class="comment">
+        [% comment.name | html %] writes...<hr>
+        [% comment.content %]
+    </div>
+[% END %]
+    <div class="comment">
+        <form action="[%base%]/photo/add_comment/[%photo.id%]" method="post">
+        Name: <input name="name" /> <hr>
+        <textarea name="content" cols="60" rows="5"/>
+        </textarea>
+        <p>
+        <input type="submit" name="Comment on this picture" value="Comment on this picture">
+        </p>
+        </form>
+    </div>
+</div>
diff --git a/templates/photo/exif b/templates/photo/exif
new file mode 100644
index 0000000..b60ddbc
--- /dev/null
+++ b/templates/photo/exif
@@ -0,0 +1,16 @@
+[% SET exif = photo.exif_info %]
+[% FOR group = exif.keys %]
+    [% SET counter = 0 %]
+    <h3> [% group %] </h3>
+    <table id="exif">
+    [% FOR key = exif.$group.keys %]
+
+    [% IF counter % 2 == 0 %] <tr> [% END %]
+        <td class="exiftag"> [% key %] </td>
+        <td class="exifvalue"> [% exif.$group.$key %] </td>
+    [% IF counter % 2 == 1 %] </tr> 
+    [% ELSE %] <td> &nbsp; </td> [% END %]
+    [% SET counter = counter + 1 %]
+    [% END %]
+    </table>
+[% END %]
diff --git a/templates/photo/recent b/templates/photo/recent
new file mode 100644
index 0000000..37d1ae3
--- /dev/null
+++ b/templates/photo/recent
@@ -0,0 +1,18 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+<h1> Recent photos </h1>
+<table class="userlist">
+[% WHILE photos.size > 0 %]
+[% SET triple = photos.splice(0,3) %]
+    <tr>
+        [% FOR photo = triple %]
+        <td> 
+        [% thumb(photo, 1) %]
+        </td>
+        [% END %]
+    </tr>
+[% END %]
+</table>
+
+[% INCLUDE pager %]
+[% INCLUDE footer %]
diff --git a/templates/photo/tagedit b/templates/photo/tagedit
new file mode 100644
index 0000000..a34d8bd
--- /dev/null
+++ b/templates/photo/tagedit
@@ -0,0 +1,21 @@
+<div class="messages"><small>
+<b>Tagging advice</b>: Tags should be words, (<i>portrait</i>, <i>henry</i>) or
+phrases surrounded by double quotes. (<i>"tall buildings"</i>) You can
+put any number of tags in the "add tags" box, like this:
+<p>
+<i> landscape cambridge "tall buildings" </i>
+</p>
+</small>
+<p> Suggested tags </p>
+<div id="suggestionlist"/>
+</div>
+
+Delete tags: <form action="[%base%]/photo/edit_tags/[%photo.id%]" method="post">
+<ul>
+[% FOR tagging = photo.taggings %]
+    <li> [% tagging.tag %] <input type="checkbox" name="delete_[%tagging.id%]">
+[% END %]
+</ul>
+<p> Add tags: <input type="textbox" name="newtags" id="tags"> <input
+type="submit" value="Tag it!"> </p>
+</form>
diff --git a/templates/photo/upload b/templates/photo/upload
new file mode 100644
index 0000000..d17d3cb
--- /dev/null
+++ b/templates/photo/upload
@@ -0,0 +1,63 @@
+<html>
+<head>
+    <title> Memories - ANCC Photo Sharing </title>
+    <link title="Maypole" href="[%base%]/static/memories.css" type="text/css" rel="stylesheet"/>
+    <script type="text/javascript" src="[%base%]/tag/list_js"></script>
+    <script type="text/javascript" src="[%base%]/static/upload.js"></script>
+</head>
+<body onload="init()">
+[% INCLUDE nav %]
+<table width="100%">
+    <tr>
+    <td valign="top">
+    [% IF messages %]
+    <div class="messages">
+    <ul> [% FOR m = messages %] <li> [%m%] </li> [% END %]
+    </ul></div>
+    [% END %]
+   <div id="main">
+<h1> Upload a photo </h1>
+<p>
+This is where you can upload your photographs. At the moment, you must
+upload them one at a time; in the near future, you will be able to
+upload a Zip file containing several photos.
+</p>
+<p>
+Please note that it may take a while to transfer your photograph to the
+server, so don't press stop or reload after pressing the Upload button.
+</p>
+
+<form method="post" action="[%base%]/photo/do_upload" enctype="multipart/form-data">
+
+<table>
+    <tr><td> Title: </td>
+    <td><input name="title"></td>
+    </tr>
+
+    <tr><td> Tags: </td>
+    <td><input name="tags" id="tags"></td>
+    <tr><td> &nbsp; </td> <td>
+<div class="messages"><small>
+<b>Tagging advice</b>: Tags should be words, (<i>portrait</i>, <i>henry</i>) or
+phrases surrounded by double quotes. (<i>"tall buildings"</i>) You can
+put any number of tags in the "add tags" box, like this:
+<p>
+<i> landscape cambridge "tall buildings" </i>
+</p>
+You don't have to do this at this stage, and you can always re-tag
+photos later, but if do it now, it saves you forgetting later! Try to
+re-use tags that other people have used, then all the photos can be
+found under the same tag. Use the <b><a
+href="[%base%]tag/list">tag list</a></b> to find existing tags.
+</small>
+<p>
+Suggested tags
+</p>
+<div id="suggestionlist"/>
+</td> </tr>
+    <tr><td> File </td>
+    <td><input type="file" name="photo"></td>
+    <tr><td colspan="2"><input type="submit" name="Upload" value="Upload"></td></tr>
+</table>
+</form>
+[% INCLUDE footer %]
diff --git a/templates/photo/view b/templates/photo/view
new file mode 100644
index 0000000..33b562b
--- /dev/null
+++ b/templates/photo/view
@@ -0,0 +1,86 @@
+[% INCLUDE header %]
+[% SET tab = request.params.active || "comment" %]
+[% SET url = base _ "/photo/view/" _ photo.id; %]
+<table width="100%">
+    <tr valign="top">
+    <td width="70%">
+<h1>[% photo.title %]</h1>
+</td>
+<td align="right" class="tagbrowse">
+[% FOR tag = photo.tags;
+    "<a href=\""; base;"/tag/view/";tag.name | html | uri;"\">";
+    tag;
+    "</a>&nbsp;(";
+    tag.taggings.size; ")";
+    ", " UNLESS tag == photo.tags.last;
+END %]
+</td>
+</tr>
+<tr>
+<td>
+[% IF photo.albums %]
+In albums:
+[% FOR album = photo.albums; %]
+<a href="[%base%]/album/view/[%album.id%]">[%album.name%]</a> ([%album.photos.size%])
+[% ";" UNLESS album == photo.albums.last %]
+[% END %]
+[% END %]
+
+</td>
+<td align="right" class="tagbrowse"><small>
+<i>Photo shot on [% photo.shot.ymd %] </i> <br>
+Uploaded by <a href="[%base%]/user/view/[%photo.uploader.id%]"> [%
+photo.uploader %] </a>
+</small></td>
+</tr>
+</table>
+<div class="photoview">
+    [% SET sizes = request.config.sizes %]
+    [% IF request.params.exists("scale") %]
+        [% SET size =  request.params.scale  %]
+    [% ELSIF request.session.scale %]
+        [% SET size =  request.session.scale  %]
+    [% ELSE; SET size =  1; END; %]
+    <img src="[% photo.sized_url(size) %]">
+    <p> (Original size [%photo.dimensions %]) </p>
+    <p>
+    Size: 
+    [% SET i = 0; WHILE i < sizes.size %]
+        [% IF photo.is_bigger(sizes.$i);  %]
+            [% IF i == size %]
+                [% sizes.$i %]
+            [% ELSE %]
+                <a href="[%url%]?scale=[% i %]&active=[%tab%]">[% sizes.$i %]</a>
+            [% END %]
+        [% END; %] 
+    [% SET i = i + 1 %]
+    [% END %]
+    </p>
+    [%# Now put it back in the session %]
+    [% SET request.session.scale = size %]
+</div>
+
+[% MACRO do_tab(tabname, label) BLOCK; %]
+<li>
+    [% IF tab == tabname %]<a class="active">
+    [% ELSE %]<a href="[%url%]?scale=[%size%]&active=[%tabname%]"> 
+    [% END %]
+    [%label%]</a>
+</li>
+[% END %]
+
+<ul id="tabmenu">
+    [%do_tab("comment", "Comments") %]
+    [%do_tab("exif", "Photo info") %]
+    [%do_tab("tagedit", "Edit tags") %]
+</ul>
+<div id="content">
+[%
+IF request.params.active == "tagedit"; INCLUDE tagedit; 
+ELSIF request.params.active == "exif"; INCLUDE exif;
+ELSE;                                  INCLUDE comment; END;
+%]
+</div>
+[%
+INCLUDE footer;
+%]
diff --git a/templates/picture/view b/templates/picture/view
new file mode 100644
index 0000000..976b786
--- /dev/null
+++ b/templates/picture/view
@@ -0,0 +1,7 @@
+[% INCLUDE header %]
+
+[%# Scale to 800 across by default, else scale to appropriate size %]
+
+<div class="sizing">
+<a href="[%base%]/store/[%picture.id%].jpg"> Full size image </a>
+</div>
diff --git a/templates/recent.rss b/templates/recent.rss
new file mode 100644
index 0000000..51be582
--- /dev/null
+++ b/templates/recent.rss
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
+    <channel>
+        <title>Memories photostream</title>
+        <link>[%base%]</link>
+        <description>Recent photos from [%base %]</description>
+[% FOR photo = request.recent_uploads %]
+    <item>
+        <title>[%photo.title|html%]</title>
+        <pubDate>[%photo.shot.strftime("%a, %d %b %Y %H:%M:%S %z") %]</pubDate>
+
+        <description>
+[% FILTER html %]
+        <a href="[%base%]/photo/view/[%photo.id%]">
+        <img src="[% photo.thumb_url |uri%]" alt="[%photo.title|html%]"/>
+        </a>
+[% END %]
+        </description>
+    </item>
+[% END %]
+</channel>
+</rss>
diff --git a/templates/rhs b/templates/rhs
new file mode 100644
index 0000000..e23114a
--- /dev/null
+++ b/templates/rhs
@@ -0,0 +1,33 @@
+<table class="commands">
+[% IF ! request.user %]
+<tr>
+<td><a href="[%base%]/login_box">Login</a> </td>
+</tr>
+[% ELSE %]
+<tr>
+<td style="border:1px solid black; font-weight:normal; background: #eee">[% request.user.name %]</td></tr>
+[% END %]
+<tr>
+<td><a href="[%base%]/user/list">List users</a>  </td>
+</tr>
+<tr>
+<td><a href="[%base%]/tag/list">View all tags</a> </td>
+</tr>
+<tr>
+<td><a href="[%base%]/photo/recent">Recently uploaded</a></td>
+</tr>
+<tr>
+<td><a href="[%base%]/album/list">List albums</a></td>
+</tr>
+
+[% IF request.user %]
+<tr>
+<td><a href="[%base%]/user/view/[%request.user.id%]">Home</a></td>
+</tr>
+<tr>
+<td> <a href="[%base%]/photo/upload">Upload</a> </td>
+</tr>
+[% END %]
+</table>
+[% INCLUDE calendar %]
+        [% INCLUDE tagcloud %]
diff --git a/templates/static/1-s.gif b/templates/static/1-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..304f6ce9a39bc7cd65fac774f0902818271a9e8d
GIT binary patch
literal 646
zcmZ?wbhEHb6k!lyc$Ud<<x=Of$MfF5S^DJR+}AG_J-R>V-RmW{ZcMv<bGna@PfbnD
z#EH%u*H_)YGi%ev^iwCg-@IJ>_`#ezH)q_vHDleHitAUW+`fJL>7#ic-Y#7*Kj_8N
z`KM3z%$gOjZcYAyeWmNy7OYsFaByGinN!V^COTie+;!n>+wr5F2ltoGn;WoWTm9t8
zF4L#`Enk+nV|)Io<4q6l&Ny_iY~S9ZJ-eE&UYfLbcZHXi*OVzf2llp1o#M53ch#o#
zRrBUXZr+qSe_qV8r4ch`_+7u+Gi8eVvSm@*w&uKkv0(9{uyt#brcUvB@^HqE?FIL4
zPxAKmet2*8>63LQj&)U6S5KerwRvO4`n6?OE>4;?GwAKB#dGIGpFi8SbZN}X=L;`i
z?3_0*bj!w?RV(r~tgF0wxo5@<{~6N*H*d;1dZ>NYOz+R1KOa7Pc)|pSkMEZK|NozX
zVxahwg^__FlR*b$5-3g>*dI4!HZ^6mwzZ3;Hg~u8wxxCTw7NK`7(}r!wNGen^)gfs
zXJu7l7U-SR#w3?y!ojF2$kLbA?wh`2hm$8WTVK0?u8hSFd!69O{i|4|<%81AZ21{a
zwXsR*87m}M`-xv|XAsxW3Q1;u(8j>%oF1kq__FmiUwWeXi%+iucgPCQdii3m<)fud
z>l^e>Jb0C~VPdPZO^wJw(UgN6I&S*}4m7Aa&Wy^KkkT+I`(Tr?_O>S(0jiBnCh`|K
y5|Wf!`M5+R3?3*wKG>qlb%x_tN23EHC;KEN2Ze<P8>IX#cv)ATQC;r9U=0A#aVP5l

literal 0
HcmV?d00001

diff --git a/templates/static/1.gif b/templates/static/1.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0eb416fb09f3479f13469ed279f6ed1cac254f93
GIT binary patch
literal 649
zcmZ?wbhEHb6k!lyc$UEM`o)4XryCwUdi3kpuVY6m7cB~&Gskz@G`FXZW**pIeE06%
zo7Z|KOmJ*zahg55Z0qK<zCMTDJ9Gd1`Lk|q!u$8{J373UE?xTj_wT&Cy#9X2Wy><>
z%!z*g{_Tkqi+AqqPDt=tyg1|joyjdN&VT;=Uc5LhD=VYByY%<(ABPUDoj<?p?%m_t
zw{KszEPKI%?z3mN@7U3`VMB9cqgzRdTSrI7(xnY`b&gAxq&;|WCL_bSv$J#Cwr%O@
z0rm9`X=wrT=EY2!<UDIu%$zw<@7}$xs|%PhBeJp4b?eqm-Q6W8PcAufWJ6}AOL4L5
z#EH(^wr#1abDBFh`u_b>8#gv3BzU*908MVFuMfC<u`MGb?aZ02ckdpnuXjpIOIx}$
zbH$3NkMEXEnBegL|9=Kr0>z&!j0_A33_2i7Kykvr{;VOPsYzK&PRHL-!9Y(&ym>-`
zxm5hrX;U3MMT92G`b=LC&tt;G-0U$eHdauWWg#EevH<(3Y@Cej@v#eeG?~=Rrm-<@
z=VW1BDC!nDoj>mUg@y6%`U}`&Ss2e>3XQoG%X)jEtKI#Facm2fr0>T+S`e)AmVsgC
zf~df^ig95Jy(8}PF?{%>aD`9N#i_CS*(;%bZSequ6`~0Tne;i>*c1#Na<}js9|%|w
zw32~=<$@nmgup{?J|3$B9s&;(noYa~rsQl?aJaz0s;hNpjUsDvYeX{}M@CYTM-LnC
SoD(ksm5z4>B``5ESOWkt2L+7)

literal 0
HcmV?d00001

diff --git a/templates/static/2-s.gif b/templates/static/2-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e6c405c13ccfa2026687c9728f2d028baf79f783
GIT binary patch
literal 718
zcmV;<0x|tZNk%w1VH5xq0Oo%H%*u_(#)-+te%IBE*3*-Ge0-CWM4z5gqM=>b*N>Z;
zOwrDTo10O$wSK3jb4p4|xVLNT=%VcDqu<<`ySahr<)85FrQO<?@9d@C+mh$xpOlnE
z?dqfB;GE&!o0ynN;@_N@mrT66f|;04&dZLvxPZ>ggVWHF%gKz}+uQEzq?MINmX=B5
z;h0QJOyJ#`%*un#%!R(ZdZwjV)Y6Htu6gO_p`)Q?xVCoO*_E!XWS^a7+Sin(rdYVP
zZL+U=qoP*U(~6drO~Jo++}W6zmrBRRe5R#m&C7+=(~8&BkgcnC&&`U#!NIk%e3+M2
zxwvrG)s&Z(RJgW(si<n4n^T#XSe=|$ot$5wpH!fqU%$O{si<(AoKM`@lik~r!oP);
zluDPDOUA>3($9+P=%B;EhO@D0x3z4eqG+e4YP`96zPy9i){e%+iKnJp<>H*Hsb;CD
zUYeOpl$1=CmQSIeX4TV-qoQTd&5z8=f%Eh8!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajIDSLy9hmD4Oij0LBK{PZbMhOxYg^+`W18`n3WFAT|F$o-;
zo}dX^K5riza%W6A1Dk$)hAk!+bA7_YEMqVl9E}TiXdiubJ9cSWeIYUv5seZ88!UZN
zHEtvU27L%8HjNk+I>J_L*logC0TqrIAUIb`C>3Q8eZn{(k<O6{5P3-ONYbMZ0|yi?
zU~p6jLj*kvf-%4|g+MlnlV)rPaij)?6D_`|;N)n4f-VTSG(Z8R&k!WY8nu9+pih+_
zV4_r*Q6$c_Y$+xQSW&KzfdfDed|07o&4maq_V8K|Bg=><bcBpp(MQY;DkM5QDDX$C
zgboBN%uo<fq6CEoPDB8>u$GUYJxwH3=->f_hZhqr5P6}YZ=|-oK>Be}z*8UqJJ~vH
ATL1t6

literal 0
HcmV?d00001

diff --git a/templates/static/2.gif b/templates/static/2.gif
new file mode 100644
index 0000000000000000000000000000000000000000..251beccdf4ce570d9458afa78f2acf0be2ef05df
GIT binary patch
literal 694
zcmZ?wbhEHb6k!lyc$UC$^IFfeX>N-a1<#q|d+ccCqeqW^{rYwJV%yV4Gq-L|yL<QU
z?wz>@_7_i>;MmgQ^!xYkKY#x8^*Q9_<-LFZ{><ryjt;Ncv&)t)U3&NK@ny@hH*RcN
zx-_$;#j(ELY2rlZrAr$YFV09$54eB-R905T+_};3-o2hQ$$9J6O)V|Xot>StX2sOi
zInJNowQN~tLV|Zff>(EUNqv35p+jr`{Q13Y+qU|8hb2oIHf(5~H!mhFEp5q?w8loa
z_wV0kWH>KgoVIP-mLo?t%$XB?_wKRZzkhUhm+sinRaY0#*y!5d?^sgewqQYbak1;1
zIZ<cNZl5tD^2CY7Cr>V^t8+SYW@~1q%Yz4JGBVP(Z{NOiXLnj!Ku1T%y0r<fUo5zP
zXYz^_Q6Jwen=rxQ|Ns9Cv;>MjSr{1@5*TzqmVn}ff&G6&LQ|8mM7X4ikAk_c4S(~5
zgb>~Msne!vIS30(^p~5yAf8vAm905oDr4;GSZ>bP>0(^Vl+@yxnV6z@qGFkuV;QIN
z>aaRnO^uCWVUOX6V-Q(2O;p`!>aM8hxM&83^D*%orW&~3h>f}ZIG!bL?=(Z{X-qM3
zaj)Mp9GdEGF`biP#~bN_1KiEt8ci)y5fhj+`0Si&FESmFo6fkvDud(d(*t69oGN+~
znY!edn11gth)B?M;Z$GAu_SqB&*{cO(^WPTE;=|g<%;diwdB-3)UA`CcH_dL+|!Ne
z-}VT6_`0;6MJho-WJ80?qNN<cMKKx*CmNVkMfa>LP<(i3jU$^d*B^zXly+wJz)1;`
O6AyW58Z<I6SOWk&Eg3Ta

literal 0
HcmV?d00001

diff --git a/templates/static/3-s.gif b/templates/static/3-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..07a4ddfefbfe45136651cc5e09cf8eef2866f62f
GIT binary patch
literal 718
zcmV;<0x|tZNk%w1VH5xq0Oo%HwX|`os%oaCVv&(U#lw5OyMnyBa+Q@wm6S=buV|N+
zN$lyP>*%84-kVHJOp=mB?(3xK=b_`^oP2zIpPy5im`d;LrI(jZl$1rEo>Roac+t;=
znV448(uv#K+mez-)zXsV;h5;<pWxk^?dqf7+?v9_h04c**VT;b=b_islG)dmnVCz{
z&ylaKcI)V%)zgaQ;+~k8PteYZxVC?sn^nEMbHl-csHb46s9)RJlFiDC-P)J5vueP-
zguJ_Sq@r)y*p}Pbm$|oYxwvlA(2=2^X}Pz6vaoTmu6eh$b-TH9*wv88#){L?iK3xm
zySaFyp=hO}Y~tUXtEq9ixPZRAgTujhmX=cE;+veDQP$Lptf_C4lSibZS(cVd%*unF
zoLA4ygwV}~+}V@S&xf<IY_+s&!@!2d#EH4Ld#0slsi<eGs$|Z~j@Q<X*VK^V-j~?c
zmE75tyt;PV*pQl-TAG<%rlnY$n^*AdrStRi!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajI9(#j}hmD4Oij0OEFdZFYPH_-=evpHPAsS_11}7yv1Y;={
zor<7hL=_Yn8D2eSKPM5ae1}^E6@7gV7zn}&P&^Bcb#N39SU@gceIHUtatw|nIyrqt
zM?24VR5vBdjd}|+N^AfJ!yIZtA`p&#dJ!rK2^iG_0ah^JbWfdxC0g<bd(dVMiF<`M
zWNFaCM1Ut<9sp=y&(I4LSMc<y5JZ9m6=sC3X`#&!iU>pe)j%V`PY4@*5JYj4;!qqi
z1{CzMQ((#q4J`U_Z~<bOhe8nE7{JkGfG`&RE=V!az=DH4z0@(GBjCaX8DRu)Nn%By
zg9(2tz~W=j07RMsG^+S$Qe*^!w|oT2)dL|yj0PhbND#3=58y~~dqMQ`_)j1JI~s*@
ARR910

literal 0
HcmV?d00001

diff --git a/templates/static/3.gif b/templates/static/3.gif
new file mode 100644
index 0000000000000000000000000000000000000000..dc9051033e98eb1b850a8669d596ac1556cc61e6
GIT binary patch
literal 695
zcmZ?wbhEHb6k!lyc$UC$^IFfGIlix7EZDs>_vxdVixvexdh}@P=CohGejV6feE-hm
zY17=!oNl;$vF+~NyAvijwzN1MJ6ieY&!4_NhmH=f_wU~?UApx5@87d$m*wT<b$6F8
zU7ERUS@z<^X-k$g%$pZ8cW!i6Rz^#Ub9#Ef)~%cF-aYo<!I`sXw=Y?eHfK)MtXVOc
znJyh29VbsNIdNj~wryJy61>vV0!m8Uwr$&1U+=JEN7voE$BT<yw{PG6=g;pWM>eFT
zrPb91Y}n9z=FHYflbq}81Mc5HwRmyH@83TT9a=koepf~Y(B$Zr7RSa$x4JsV_wV0!
zcb8;jI5#%BzI*q&uFh%3jL80e$Akp$Wy>-bEa=|2v8l7ObLrBC`g*5{6P<VN>|VDv
zVa1B5kMEXEnBegL|9=Kr0>z&!j0_A33_2i7Kykvr{=XrismanTT1G+B$yVK4ym>-`
zT1foVX;ZbVM1>~mMNMB2&mY0Y(X2ZyHfHsz7{+N5e9Ii|r^YY~vd6^6Gsdo8<jUr(
zF*TN*DehDp6AKsfG!Yfmm8>VvbFsuR?3w0cI*mJ)A&xsfmWg5CbO-4LoXo5-=XheC
zP4kmq7{keXhUtP{r-jg}N#d+0Ie2z_XZ36kIIvH|W5e5qr8;3jvLDhf&e+5<E$@fH
zx1;l?H$0zGxY6X1=ae``B^BndhDLEVR;`N$MU5wzJJ}gBf|vC=Z09tHXju7RVNjzU
z4}*vAhD$+{d5jNu7&JI~IeH6+z1fi9Ai%^Ps!<baq}t3H*(@R;QL(VmU5G<q!HEvR
NM_heD2~3O()&Pay7yAGJ

literal 0
HcmV?d00001

diff --git a/templates/static/4-s.gif b/templates/static/4-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5e640e4e72080e5039de88a443c63c44b68afd6b
GIT binary patch
literal 680
zcmV;Z0$2S<Nk%w1VH5xq0OouE@9d@R>Z5#oeC+9?OiWDc=%V4?o9gGG;@_O`?WN`7
zp6BGB<l&f_nOWf7n#ID0+uPf#s$k8^gzM;_)X|c|!FSiyjK{`&&&-eH;hp2)oS&Xt
z%E*B3>!irWe!jeeq@!8J#EGV+TG!Q-mzPY?&W69eblTUD(9MR?&xxR)T&k&I%gKM(
z)sV}{jHab=oSRjYltt3ejiaGx#l(M`n^C8xYOAVi$i|ASs&?MnnV6STy}N$V&XCm7
ziKC)wo}O9O)Qh;bf6B;ym6S-x#(b5PO_h{R%E*hIolwQYc%`ISk&#2)+L+MIkDi`W
z+SrzwnM;zAM90N@>F1%=)04r!dXkbz!@+{7r)!mzN}-@;#KL&b&4`zlOPZNlpq^Sw
zOH1C{lEA%$l$1xWtz_uspT50zxwnABz=qY*l9G}`ot#pbmrkapSf{3Dyt;I?vUHxE
zTfe=7o10GN<DSXKexadN^Yin=!^4n}K=JOT|Ns900000000000A^8LW004XdEC2ui
z02BZe000O7fP8|2dxeIF5O{-&hmD4Lij0jG6&D8pkCA+i3`GV_83Tuqn~f7(9wJZ+
zn4^vpLmV-BSO^J@j!GyIdU{z^9k_=qC1<^QKRu$tdlpkNcgI^!%eZ0}T}gUgM|v|D
z1;Pv!DZE548+vjsRJaUw9%a1^Hf(xYaS}c!0k?%gCalou#e~c;DSANA&=9~-fEI9`
zfN9WR0}wq|zNoknLPx_w01hCa@L)`u2RumZ$ngP(8dilM>`4&7jD`#xqV!txhJu1i
zg$Uru)5y(|8f}cgSRtVRCISNZ3_Y{}!yGh1J|G#PpaaxAf~FQ4pum6w2L=$-DG){g
Osjx%^nSE6h2mm|HBwf`2

literal 0
HcmV?d00001

diff --git a/templates/static/4.gif b/templates/static/4.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b42183c4d58516c8969f6c2162c0084e2bf66b92
GIT binary patch
literal 668
zcmZ?wbhEHb6k!lyc$UDhVnx)twF$d-=AJp-@aWN_U%!4`zSy>PbK2_{3!XljdH3$!
zMT>&(-<dpNg5!bx#eIDa@87?lGsm~3#p%zVKOG%jvuBt6{{1^IFK_A6rOTFOmz20A
zBzV1l|90-&=!p}ZTUs3N-aUT*{;BlzfSo(Lw{G1ue}31oqm^gRZtw0coi!^aBg1*g
zlC<sHw`XLeZQHgjA;CK<D<dr}t-HIVt}dXs*tNdislMJ}$&!Y~M%M=q&YU>0c<Iv2
zWy>;8o?P<o-Rn7Xq8BgDm@_Bp$dL_8mp06p5!u<<Icbvff(6|>c68O%IW;!AWoEk6
z)j1wIwD!!It!Zfi_4NTA9UXV?9{cm>cYnX*ym>LdfB$G{ao(_@dGTVP8@6oR*fedL
z+s$h|AKxvTFu~#f|NjiM1d2ad7#SE67<53EfZ~LK{bxf$Q&X^lvZSn|Lxj4FSo4Gg
zOPlzq)23=V2?$TLlAFFDp4XX$wb^!I3=?0>bWyHlif#*;)-K>xWeL+>$j%U}wopVR
zXdwe5b6o7gcq5Mmf=rBYr_KaePhZ7wGLG$xMd-9!OjkHgFATSz8pF=W9>*cb#<6X>
zeB{)(m*W`XIpesUuHN{>%Fw{dv%>HP`+09B_GuXwKM%3a6laSy`e&Sw;Bdf8sYW0%
ztbpN&w^>v~#wCW320e~lu~i!sxg<EuH>KXOeBhueDjw4?(_sOV=%lG~I-QM;4GWmK
m`T`VAJ~_(Dvw=-iVFBw=9#tU~m5U!(+yupz9$;Z&um%8SXA2Mj

literal 0
HcmV?d00001

diff --git a/templates/static/5-s.gif b/templates/static/5-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..00f59be3ff2234f20902edefbbb7a92c32e99382
GIT binary patch
literal 710
zcmV;%0y+IhNk%w1VH5xq0Oo%Hv#@&E*Otx8j>pD*z`lFg){wrugOQO#wX|xToK=~b
zO{b=6*VT=al17=BQI(ZQ?dqe{(uwTpqwwve?(3vXOibqEo_u_K;N6<<?4{GuiRI#+
zmzPQF=%S;dSJBRp+uPgM)Re}<h|bJ|-`twj(vsEFisIj#>*%24;GCD1Nyx^EmX=B9
z<e!t0NXyBLl9EJ~luNm|Yt_<^o}E(R-kYGFW!cw})6kKpre>|IVw{^;%E*h#$bZ(<
zi>#_}qM=o$q-LU`T$h$jo0?Llq;R#ee8a(c!oYpR!g$8Sd$qK0(a(vfr(B$yQL(UT
zvaoNcrfuNfm)h8pl#@s3<)4+5MX;}Cvax5jv~st#ew33*<l&gPw|?Z|otKtUs;Oa^
zmsPB*VaUgUudZdFpIDuoU$L)oq@z}(q*s}kN~57@y18+_y>`61g0HQ3-P)F$n^C{L
zgPE95nwm_ot#+@jaG{}9$;XJUtZ&@enDg`V!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajIAbW$0hmD4Oij0O_J|+>DBR3Eekb{Li5gG#)8y2QLOdAw_
zorV!`ItX__9<^j4C#$T7qG~FAz`$iZDHD!<5m+334PjqqYXC1T$9^MiEHN%NL3U7h
zBoNgaV|_4v2M-D~NClh65i`pNF%G~91UC}KjZ!yHIf}f|lE(p+GDy7WIz)lNl@%*O
zkkA9>L7y`LBs4;igifC<8U189!lKWD4;>mYKwu6)32`WtaM*D&<slPd`fQ2v(vJ)@
zeS&le=?6q132YP`pyHuP8Y?Oi)Dd7IgP#g}_=udcgvgLNahwSGVMGLpRTVD$$?69J
s1_5#-+!&A}M+A-&8q@L-lyw4xDk(4suCbwmF};!2YOQwlLZ?6gJ8b7_I{*Lx

literal 0
HcmV?d00001

diff --git a/templates/static/5.gif b/templates/static/5.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e488fdbf3d8c76e31041b0524ec614af76b0c8a5
GIT binary patch
literal 692
zcmZ?wbhEHb6k!lyc$UC$|IXxT)7)-e>shxp;n>m2r;lbXS`>U>fAOP7kAD67HD`|R
z<%?}+PB(1boObu_-3b#Mckj$?X>sc7bNKV;&-?f9XU{I{=<xde`*&Vm-qNK@ySq!4
zF3nuFEPL6q%sF$S)6xPKFU~k~W@}@kTW4qI)~%Z|GMqPVY??POX8!!H?(WhVGa{ER
zZRqIe$jC_BwryKhRz_M{+Mz>h6B4{LGhOQH95-xezI*rhf(700-@o0lqig&2?GGND
zNly>>^XK=wcdzHniMoIPR7;C<ON-<0-#?ZtNt-n*rnuO3+qNx7j%--GIIX0_ZOM{`
z{(i^$dZ&pKop<i+uB&r8dv<$$eZbwj$4;DBoRHu(cW(5_lS}IB9qQ@=CQWi~Y;^tj
zZrSS>3s$U%nlQoP|Ns9Cv;>MjSr{1@5*TzqmVn}ff&G6&LQ|8inZHb!y@F|=g?RIX
z1Z&y&sne#qdWZ;54Dp*josp4Wn}f4Cd@5U99P^qrY`jxN`Ib9GO^u6ZW1PNbD!&GY
zv&*!#ObjunVz~EC6;lb`$9^)FHHL|2ft2Mw?wD9!X0`=WgQTZ33p`-uW@q0uJz9NV
zTx@I%!*`yzbMcOHuM(vfENHZ2`nZq7GpKLQQs!%H5m`xx#2Fa4ba)-g4osRTaEv43
z^K(~+=`A)jD^46;(B06pTdYKpLD;*S+fc5C(_!stCMFiHh;H?TT-*jC(?Wt68XFpN
zSlE7OHy&i2!O5XzpjqyDh(|(FfWzy-gErQ6@fjx$Ojvkr0Skv<-;xtbN=_^qUUqvV
M79JLv;lN-G0JKUKSpWb4

literal 0
HcmV?d00001

diff --git a/templates/static/6-s.gif b/templates/static/6-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..226cc050ef2679a57205179d0beb83c127d2608f
GIT binary patch
literal 719
zcmV;=0x<nYNk%w1VH5xq0Oo%Ho0?JU=%LfmipR!)#lnY^l19C}a^v8c-P)M8wQJDL
zhRMf*#>9!q$9|KONuHfqm6b@myKtJATI}hg?(3xQ?4{@ApOlnE*VT+nOiY)TN$KaI
zl9EGwe0=cjrRCzD$HjZw+uNR<Qj(HH#>9KY!+*-ii_Xl6=Hs5|<)7;3q3GtIl95B%
z*N@K2j+2u_%gTnPq-v|GX|=L^k&#2VwtvyjirUzf*VUA}x^I}5PQ1Ewrlnfa&yk*<
zP@kS$ySagzn@+^TdZnaY(aw&ms$s;!e%#rUz`cUFwsGX*o8#b|uB~R$(2SXwRLRGS
zt*ddbt$3oKUbM1tsHSqexO~dUfXvE+&C7?at7qZfo1vgvm6b}Sq-D;_jKjfqu&-*X
zscpu@fZyDj!@+r=pI+_iqo1Esot$5vo?gese7?Mcv#@)qsA`#*O~Af)nwd?Mlt-eX
zSiHJ&v9ETpu6eAgbd!@ulaofLreD_6lk@ZQ!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajIA$x<1hmD4Oij0RC4Qc`gIV%)?kb{#ABy(a3FeeKK6`YEb
zEe1S6A|ha32nrjie5_;_eQ_gweR($u788vD4NVttF?MVZeH>XfAI6gkMHg*hQ%OvH
z4s|^in}=UF7cX}J8fO|1XmmFd9*q%Az%(pz03$3;Rcz2}ltYXL4h1AonX#o$0U0Nb
z3^YWdggOaP7~n86<c^LfS2P_00pnl{0$M1j*a3mdngzuUDS5*yjSCfi4p`Cf0LTCo
z0S-|RQiMYvH&{R<@X;p*k})Zag)p?C1OPlVfXR8$Wd@NHW-4UZlgm#93q)l6DDyxH
zlo}>1mTbz<;SbqD6*eGn!GHh(6M8<RqRU6n-9i*LSU~ZiSUtj#?3Q&@2=bpm06XGd
BWxW6Z

literal 0
HcmV?d00001

diff --git a/templates/static/6.gif b/templates/static/6.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4b38e4dca34b358ef981356f9b6df59a23f00ea1
GIT binary patch
literal 708
zcmZ?wbhEHb6k!lyc$UC0ZJOJ<wF!$B1@GROyLEHgqeqW!UhBDkXY#LKzb;>FJ9E0>
z*wM-f6CCf}y}NYj(!M^2*|W=9TAbd$f1j6^*U{ni=g*(tzkkn}6Lsdy*0i*=;$qjj
zI>-0#-!56wFma-DW24*R#cA8NZJ9L5dC8Kr6DJnmzkll8yVu>_C3EIP&zcppZQHh;
zJG&Pw=-#oTD?L4+ySuc$KA^tdsiefMzTV;F$t4>$G#@##p{2#Sr3L7Q<8^gTbLU1s
zcyJ~wD`Woru6grfX3U6Oy0qc<?;jZ%X+XEs)dh5Rb|xfvXJj}pTb9|;(Xn)C=HkT}
zXU}fW%yhYX_t?gbO=)QX2?<`ymSrD0w6?L)wZGqS>())%w{JhNzj)3Z-`6h|Jbg6t
z<GW=mRzyvh;PC(de+F6t#h)yU3=9bjIv`6xal*j<zagQi$;DDT*jn7j)K^BVc|wAX
zXZ+M@Q#H+mL?^1qO<xet<H*X<Y_fofF>*Cm+*ASHWvWWk7~)u%BU$32qSo`+u{tSl
zi(}+ukByCCj%Q$s7YX;D9v8<I%@!FM8_m3Ts=DqrW|nA{X)&?qrWtroyUrOCd5Voa
zCTe=9{j|vV(_3;sKGTX?Dy{K|^TDAD4XaWkYeEk(9tvX6kKVzuVM)Wy>EZE74jWw@
zPB-fQ(yH_<TRn-5XB!ib$&Zcqj(h3(Fl^kBaFdBKN+`$kgX{esMX?nI9qA1V&GpzA
zLaG#8IVCt{^%xZ<q#kH0n>xWKfN_}<BS)B1Y}Esm=4PfQMFEopN5{9*dEM14CYW+K
ZHVWu>)pQ6rw)be*_9SSsstGVy0|14*8!`X@

literal 0
HcmV?d00001

diff --git a/templates/static/7-s.gif b/templates/static/7-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d60763a1ffdfaf60b68e1b0cd6bf106885571fc4
GIT binary patch
literal 673
zcmV;S0$%+`Nk%w1VH5xq0Oo!G@9d@2(uqt=OniKN-`tw)>7&!piRtH|;@_Oi%7fe4
zmz|tj!NI}g;hoLOgp-m+$Hj^0=Ahf#+w16})zgZgpH%ASq3-LXm6b^5<DSUIeC6Vv
z@a?77)r_5;P}9(nlaoZDp;_72mcPA&pPgmT%#WU&ZNkBJ!@+r>pk|YjOPQEY<KUd(
z-kYzjWV*P3k&#2LtaX)@M$XKIlaocn!H1NSOPH8SmzPlT^75mhW#HYGmX%MIl})Ip
zT$q?q+Siol<e$F0gR7}+nV3z{&xOUrf1jRFmX=7Cl}MhQUYVIo-rJd`q->m<QL3n4
zv9M{*%Z|;<g{!Jyv9EE+#)`PMf3K~0&dh_Lpj64neYm%4y}EsrluXgjiJO{Ntg3dR
zqE^<^kL~KCp`lXX-I}tncG%XH+1HQj=%Bp1f~>1!ySab6xq+>#cdM#h$;XSQrfSQ{
zjGUWKnV3qIluWa*d$X}=<l&gn&XDu-^TWf#kdQ#}?xz3${{R30A^8LW004dfEC2ui
z02BZe000O6fPR94eT9aH5_*G+hmD4Nii|~C1_l9_m>LE<3^{{+9R@984h{*YUI<cU
zGZ74mg%n48H(3=GYfyI{E=B}FV|#`gbbQ9gd`Ltga7+^bhiG%gDmGnp4-Y*tRSnRG
z1yjZ*S5{_xFeGgv1&$mjPCRZUKw*41U{ME-g$Exa5E_tKf+2+(0^b|~h=5?j2|h`b
z*vVsoUn4v+Xy}Lofki@#eYWsf(S(bF2_Oxnc>`j>kPjIyq%73IM@uSaEO2lnp%DcS
z7=Ex((5{gHJ;DrOdBW$55QIht_(5u@fPxw?<Yb7tM-bIM01hA^utBCF0Rtcn`f3ra
H+CTt1%2rmW

literal 0
HcmV?d00001

diff --git a/templates/static/7.gif b/templates/static/7.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f22734d0944dd2467a03f28a5384022758f52a6c
GIT binary patch
literal 672
zcmZ?wbhEHb6k!lycoxra^IFfkwF!?NJ(@PnZR_T=r;lbH*kAnX*RS0>bLY(Qy?giW
z{X3H<OmIANx?%S0vdb6S`uZFeEed}B{{5dne_C3cIy$_TE?xTj_wT&Cyt=x8dGliG
z>mA;|e_L1QIB}x$;>Bra&TQSVq51y(Q*-7-ZQZ)*$dL{2-o1YC;LQB_UCWkb&YBgI
zkl?*^X+uUvT1$)Lf(6|tPAuNBqpPmYY2(JGB}*C(9a_6|X=Y=iTV|%q+_}-)w{M>_
zC%V2q;O^aH+qP|)G|9Q8#rf>n?TZ&@WMyS^cbA+zxum<hG%YQyvC%a>J)onbBO}8(
zA;GJ@-s#Vu-^InQzkmPOwr$(ao!v{8r1keZ-o1N##*E0461TLpfX>d&Wy`W(zgY0`
z-Le%cq9#mm`2YVu1C4>=PZmZ7hIj@YkUgL{VPOB;5Z~0~7aA00sqCcaC?noHAzocG
zZtAqDTB<_A6Ak31FNovOVPbD~jpJltj9t4fmXRfvk87EdeOxRH$C~xbEIWBLm;!>Q
zGO|WT$HYW4FmT7jP8C(LoyKwI)|qp>%+p*9r!&N`vOVYLj^><hV>X>XhGE(hwgnzi
z(^m<`G4n>V?u%vGq#UBka!R13=;Ofz@l?hejaf#A6PWebmbF$fDTOqpY~oQfOk@q2
z&cq<Vv1iM|qpeardaMi?{30xBUi&;2BxX7^urmB;jA~LmHJy`5CcrR*lc`TxjD^E$
m!2?&;WwK!j8v?Q~Ff!Wpr0j5PZ0gaDXiK>m_{v*>!5RSVz6Htv

literal 0
HcmV?d00001

diff --git a/templates/static/8-s.gif b/templates/static/8-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b648bdd4bb5f7bff4961a016bf6ddaa44afeae07
GIT binary patch
literal 731
zcmV<10wn!MNk%w1VH5xq0Oo%H-P)7T&4!wpP}9+gs;OSVzkKQEp{%NI*w&TN&WxU%
zSHHb=%E*G@-kXz>MzgVYot$3R)s4^0hrPRbm6b-Kpk9@fNT{c8nweDZ?4|JSrS0mY
z?CGOSOiYrJM0|XF?(3xD-<<2{qLY(E#lnZ^<)72gk+rmI+uPgg=%CowkJi(Qt*de5
z;hnLsdY6|;-P)Ms;h3nWV8p?PudZjIpjX=0kf^6zl#@l((~#EFljGo=pPp2fl}*jd
zh34a(tgB(czk#r?b<4?qyt;DI&yk{_WTvHIwX%G}!FR^QfX2g!ySZ=D(1*&$gq)jG
z!@!2b!-MDKpUTLK%*uh1kwe|umcP7#tE*tSw{xngX2`~hmX%Ahv1zifZQ9t9udR00
z)QjKTm9DIKxwvq`z<<TVdzhC|)6tErt7X5vf3K}@;^CU6rC#OYp0KZG=Hs5Xwr`}P
zWWm38rlfAFsBXu`eBa!fw6c1(w0V<~MDz3W!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajID0_p8hmD4Oij00K5lIAQO?Cq|8ybF)gM~3GR5?mnabyc<
z0b(E;poU>gFehC!JT)~mIX)#IpN26u3<Z710u~;9UI+mO8HX7IcUU+T7c37?Ra`+i
zB^!qtA`E>N7Y}6x6Uzq(zl|9xFMSv?N)m4`XD&J%o*Hc+AmH2x9DVc{$pa%=qZ9#v
zjBwxp!?HdQ)K~%5Xh;Nv5a=8bQm2Q5D|b2_0-%COA30-4ByeIPjfXV|#2s4k<wPGa
zGeU@H0%y*P112~$`mrEE9|cj^Obb9^1fHaYP!!4l;Dn521a90wh6F*h4tw|%;t*nj
zmI_Zec(ggf!Uc&PemZ>klh%(04lQ&{ApvE^k}X9VY|zU`P+vb8M3it7B18)*02xQ(
NtJaYr&3^&`06WsuY|H=v

literal 0
HcmV?d00001

diff --git a/templates/static/8.gif b/templates/static/8.gif
new file mode 100644
index 0000000000000000000000000000000000000000..036dbb682fcde2aa120eafcd122e7bb969cdac8c
GIT binary patch
literal 713
zcmZ?wbhEHb6k!lyc$UDhb#vP8ow<t^1)n+H@axyFM~@zTe7Eet{^DatEAQW#eEDMA
z-Me=uOmO`D`*&ZTLq~^KON-N=KYx}kT{?SqSzcb=`}gnX%!xjGcKd<_-E-$gFI$#5
ze}31}rJ3*FzkTrF%>DbPCQWjlIMKPj-l4m@bnDhlb#;z^{`_ufasK`LM}2+3tXVM|
zH#U`&xYgG?b$6E}BzUEz1*D~=ojkduxY%{cl7_{L)3$Hlo|);gb7%LQIZ@lTZJReQ
zrlrNPuFmQ1-Q!tV8U6i^85zzA3EneiMDExDw7MZ9Bdw#OqqDQ~?%iW2PAuNAp?TZ3
zE$`mFK5}HkvSrzgjjoN2Zi^RZq^Ad*IkUB{E?~)$v_ps1&Y9!;^wG?l*LtQ+b6dAI
z;q{9JD^^5JnBegL|9=Kr0>z&!j0_A33_2i7Kykvr{=XrisY%Vw!e7!d$Xi^Nw|PQ>
zoK*bOX;ZcQL<J{$DNbJy&*RF<(rh#>jv<OUh9f49X{s>yGI@omaT}Q8R>j0b$1Rd(
z)d<_kv>_@gGB!5qz$Shb&uItaxY%MDna@VXABxv=nI0Dr%M~5H=L}=SR85)b(ada7
zyY_QNK8z2rUJxN<aaqXW;AU@iorX_F2O_7Zu`yNL4C-|6EsC49m#JXE&D~zQVG&GW
z{0F8d#P3jfkd(<L>dm-MXR}Izw*$+xWhRnAoD9?2MD`~fY+BHLQeUaZWXGWe=?wXd
zd<MoJ&K>MlPSCorp{4b7BQuAH%!f!#4p!L&C6O5nDpyq5&DD}TG!!}xF!Au;snb+!
fX=;gT<`79RTI40dAyBoU;UjZrZ%_ggBZD;n<uD%+

literal 0
HcmV?d00001

diff --git a/templates/static/9-s.gif b/templates/static/9-s.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d3ea79c79a6665c1fad8f8ef503c9135ef69bd8a
GIT binary patch
literal 731
zcmV<10wn!MNk%w1VH5xq0Oo%HudZg-)s)Z8hQ-2t(a(&Pl}6mzn4X?d!@+vCwQb?v
zo4dJr*VT-;wtUjih?kd1u&;8+#)^`XM9If~nVD6qs%ERHcFW0w%gKSYvV7Ikk(!xJ
zk&#1|l}+pDqD)Lo@9d@S>!ju4o_u_K?dqfG<)85FrR?dW<KUds(uvsDkK5bZlaoiO
zr*-M)q2=P7)zga3%!8t#TCc5e>gS>B=%A&fX3NQp$;O7fyLr~rkEW(t=Hs2*+L6`L
zlFG=7)zgg0$AYM)a=^WVsi|J*=AfdXRh*nwu&#O0&XDKipVrfgn3qnkt!tc{Rl&e^
zsi<S8rfRRQW8~qT!M}K^r(@>hp2Wg<vaoHowQ9t{htkl8yt;p&pH{cEb*`*$-P)JO
z#(>}4n!CAy#>0rCqgdeHm!Y6ynweRjo>;uPbkos~zrJ_Y)05oUlgr45-rJJR%Z1I#
zi`LVOpq^ozn@^yhT$h$mm6b}Ysco&RZS(W<!^6XnkU;V7rvLx{A^8LW004ggEC2ui
z02BZe000O7fPaF5euajID|>^BhmD4Oij00W3=>ZdDVZlAg^+`VH9aa5VF+v&Isz&r
zCVrlV3^Y<keYFPw8ej}3t$c=XFBk>2EEG(A8w7DBB#lcY!%;0r88Z+PLmG25t%flI
zwJll!U_m|=8*(wshcOqm76F_oA_;vJ11KJcFI0UTXWDQw<K}<_CteKfGZX^IgIZk%
zY{^2TPM;1l0xUFiVvQaac=|jjv!F>IG<q~PGU0*%mOL3CG+2=1fekJOPBdZwqd<Ww
zLvXwy(nrRZ8zMLzf?;Jx9|<zl9H?cdfl5Cs4DrAqB@G7-wIonz5n&3a4|{z1xq=`8
zlp`HD?$8l}gp8PGA4dF1>&Jtb07-rf88hTZ01+Yl<mDqMZ3q`7l!!o~07a3+ibr^A
NtkzMX#fky}06QGmanAq%

literal 0
HcmV?d00001

diff --git a/templates/static/9.gif b/templates/static/9.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c345bc5e087c1ca143b6446d60f445a3306e88eb
GIT binary patch
literal 704
zcmZ?wbhEHb6k!lyc$UDhb#vOHMZsrIH@tqaV9p%hM~@!;`t|F;{^DatD{o%wxqPv0
z_s-n=cP8Jxdw0SF$CehSKY#x8^*OwM|GuNc>-X>9vuBqrUAi<cFR!uDb<UjVWy>;;
z9N92uPSm7H&h_;H^XGR>oanrGamL)a(GMP+*}8Sp;>Br8mo{wMwxy-Txuc_F)~uMi
zI>(F*=RbdbFI}3sV@FqacS&8H)1gCaGc#Qp8{Ov3izzO4O-oB#vZNs+BP}7pYy0-?
zXU}eLX>rWT%6R|&?a7l%mMzQv{rktecdvKu>@F#B+qP}nf(6|hH#XJP1uR*TwqZl_
z{rjix-aXdY**RlI<cSlD>+2o*`yJ1m*_xgnkd_vZkl=my?(zD1r|$03b!!uzKAJgg
zn%l>B%T}z2nlQoP|Ns9Cv;>MjSr{1@5*TzqmVn}ff&G6&LQ|7&xQnBbjH0)Vy-4$f
z1ZAoCsne!vNec-~3{aT9Af8W+m95!f8cQ5I1AE;1n5m+?%Y0;~vaDiYV&{sBVPsh(
z&+6ngZ9ix1=~!m2n7FCJD!$VgV>n{>FfejNbH`tdH_)FJ6@Pl;)VL_l3sdFvPP~Yo
zevxzER0-4RQKuh0+>#@yz~{<V9lgtdVZ!QIr$Sq=1}=q!hC{kMTMQH;IJqYU#B9-t
zVC7|GDl}Ub!}Y-RpqT#ksIs4-ou?+Ke`YE9$=2YwnPKXpCkqq~JE~?dv8mmueCN#~
zt9iiVKp^LVCf40T3K>zIM_H8<6hu}is9sshVVoDCp>V>XSy@>2OkHH+(<auaW*!lX
YiK?8v?EFb0D<2&`*%y?+#K>R`0O<D`s{jB1

literal 0
HcmV?d00001

diff --git a/templates/static/memories.css b/templates/static/memories.css
new file mode 100644
index 0000000..45752c9
--- /dev/null
+++ b/templates/static/memories.css
@@ -0,0 +1,141 @@
+BODY { background: #fff; border: 0; margin: 0; padding: 0 }
+a { text-decoration: none; color: #000; }
+p a { font-weight: bold }
+.tagbrowse a { font-weight: bold }
+a:hover { text-decoration: underline }
+a img { border: 0 }
+#nav { background: #994; padding: 2px;  }
+#rhs { background: #fff; height: 100%; width:150px;
+padding: 0 5px 0 5px; border-left: 1px dotted black }
+#suggestionlist { background:#ffd; padding: 10px; margin:10px;
+font-weight: bold; font-family: sans-serif;}
+
+#login { margin-top: 10px;
+font-weight: bold; font-family: sans-serif; background: #eee}
+.loginfield { font-weight: bold; font-size: 80%; }
+
+.messages { background: #fff; border: 1px dotted black; margin: 0px 10px
+    5px 10px; padding: 2px; }
+#main { border: 1px solid black; background: #eee; padding: 5px; margin: 10px 0 0 10px; }
+
+h1 { font-family: sans-serif; }
+p { font-family: sans-serif; }
+
+.commands { width: 100%;
+    font-weight: bold; font-family: sans-serif; font-size: 80%; text-align: center}
+.commands a { color: #222 }
+
+#recentuploads { background: #aaa; border: 1px solid black; width: 400px }
+.thumb {
+    width: 100%;
+    text-align:center; font-size: 80%; font-family:sans-serif; 
+    border-bottom: 1px solid black; }
+
+.photoview {
+    text-align:center;
+    }
+.userlist {
+    padding: 5px;
+    text-align:center; font-weight:bold; font-family:sans-serif; 
+    }
+.userlist td { background: #bbb; padding: 10px; }
+.userlist td a { font-weight: bold; }
+.comment {
+    background: #ccc; padding: 10px;
+    font-family:sans-serif; 
+    margin: 5px 50px 5px 50px
+}
+.info { font-weight: normal; font-size: 70% }
+
+#tabmenu { border-bottom:2px solid black; margin: 12px 0 0 0;
+    padding: 0; z-index:1; padding-left:10px;
+}
+
+#tabmenu li { display:inline; overflow:hidden; list-style-type: none; }
+
+#tabmenu a, a.active {
+    background: #ffa;
+    color: #000;
+    font-size: 10pt;
+    font-weight:bold; font-family:sans-serif;
+    margin: 0; padding: 2px 5px 0px 5px;
+    border-right: 1px solid #cc7;
+    border-top: 1px solid #cc7;
+    text-decoration:none;
+}
+
+#tabmenu a.active { 
+    background: #dd8; border-bottom:3px solid #dd8;
+    border-left: 1px solid black;
+}
+
+#tabmenu a:hover { color: #fff; background: #ac9; text-decoration:none;}
+#tabmenu a.active:hover { color: #000; background: #dd8; }
+
+#content { background: #dd8; border:2px solid black; border-top: none;
+    z-index: 2;margin:0; padding:20px }
+
+.taglistheader { text-align:center; font-family: sans-serif; } 
+.taglistheader a { text-decoration: none; color: #000; }
+
+.calendar { font-family: sans-serif; font-size: 90%; text-align:center }
+.caltagged { font-weight:bold; background: #ff9; }
+.caltoday { font-weight:bold; background: #f99; text-align:center; }
+.calempty { color: #444; text-align:center; }
+.related { background: #ff9; margin: 5px; padding: 2px; font-family:sans-serif; }
+.exiftag { font-size: 8pt; background: #ffa; }
+.exifvalue { font-size: 9pt; background: #fff }
+
+.albums { background: #ffc; padding-left: 15px; border: 1px dotted black; }
+.htmltagcloud { text-align:  center; font-family: sans-serif; }
+span.tagcloud0 { font-size: 9px;}
+span.tagcloud1 { font-size: 10px;}
+span.tagcloud2 { font-size: 10px;}
+span.tagcloud3 { font-size: 11px;}
+span.tagcloud4 { font-size: 11px;}
+span.tagcloud5 { font-size: 12px;}
+span.tagcloud6 { font-size: 12px;}
+span.tagcloud7 { font-size: 13px;}
+span.tagcloud8 { font-size: 13px;}
+span.tagcloud9 { font-size: 14px;}
+span.tagcloud10 { font-size: 14px;}
+span.tagcloud11 { font-size: 15px;}
+span.tagcloud12 { font-size: 15px;}
+span.tagcloud13 { font-size: 16px;}
+span.tagcloud14 { font-size: 16px;}
+span.tagcloud15 { font-size: 17px;}
+span.tagcloud16 { font-size: 17px;}
+span.tagcloud17 { font-size: 18px;}
+span.tagcloud18 { font-size: 18px;}
+span.tagcloud19 { font-size: 19px;}
+span.tagcloud20 { font-size: 19px;}
+span.tagcloud21 { font-size: 20px;}
+span.tagcloud22 { font-size: 20px;}
+span.tagcloud23 { font-size: 21px;}
+span.tagcloud24 { font-size: 21px;}
+
+span.tagcloud0 a {text-decoration: none; color: #000;}
+span.tagcloud1 a {text-decoration: none; color: #000;}
+span.tagcloud2 a {text-decoration: none; color: #000;}
+span.tagcloud3 a {text-decoration: none; color: #000;}
+span.tagcloud10 a {text-decoration: none; color: #000;}
+span.tagcloud20 a {text-decoration: none; color: #000;}
+span.tagcloud11 a {text-decoration: none; color: #000;}
+span.tagcloud21 a {text-decoration: none; color: #000;}
+span.tagcloud12 a {text-decoration: none; color: #000;}
+span.tagcloud22 a {text-decoration: none; color: #000;}
+span.tagcloud13 a {text-decoration: none; color: #000;}
+span.tagcloud23 a {text-decoration: none; color: #000;}
+span.tagcloud14 a {text-decoration: none; color: #000;}
+span.tagcloud24 a {text-decoration: none; color: #000;}
+span.tagcloud4 a {text-decoration: none; color: #000;}
+span.tagcloud15 a {text-decoration: none; color: #000;}
+span.tagcloud5 a {text-decoration: none; color: #000;}
+span.tagcloud16 a {text-decoration: none; color: #000;}
+span.tagcloud6 a {text-decoration: none; color: #000;}
+span.tagcloud17 a {text-decoration: none; color: #000;}
+span.tagcloud7 a {text-decoration: none; color: #000;}
+span.tagcloud18 a {text-decoration: none; color: #000;}
+span.tagcloud8 a {text-decoration: none; color: #000;}
+span.tagcloud19 a {text-decoration: none; color: #000;}
+span.tagcloud9 a {text-decoration: none; color: #000;}
diff --git a/templates/static/memories.png b/templates/static/memories.png
new file mode 100644
index 0000000000000000000000000000000000000000..97847d13394489c69b08eff1073f9c604d4c9136
GIT binary patch
literal 38516
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

literal 0
HcmV?d00001

diff --git a/templates/static/upload.js b/templates/static/upload.js
new file mode 100644
index 0000000..0b033c6
--- /dev/null
+++ b/templates/static/upload.js
@@ -0,0 +1,82 @@
+String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }
+String.prototype.escRegExp = function(){ return this.replace(/[\\$*+?()=!|,{}\[\]\.^]/g,'\\$&') }
+String.prototype.unescHtml = function(){ var i,t=this; for(i in e) t=t.replace(new RegExp(i,'g'),e[i]); return t }
+function Suggestions() { this.length=0; this.picked=0 }
+var suggestions = new Suggestions();
+var tagSearch='', lastEdit='';
+var h={}, sections=[{},{},{},{},{},{}], selected={}, currentTag={},
+e={'&lt;':'<','&gt;':'>','&amp;':'&','&quot;':'"'};
+
+function init () {
+    document.onkeydown = document.onkeypress = document.onkeyup = handler
+    h.suggest = document.getElementById("suggestionlist");
+    h.tags = document.getElementById("tags");
+}
+
+function handler(event) { var e=(event||window.event) //w3||ie
+    if (e.type == 'keyup') {
+        switch(e.keyCode) {
+            //case 8:  //backspace
+            //case 46: //delete
+            case 35: //end
+            case 36: //home
+            case 39: // right
+            case 37: // left
+            case 32: // space
+                hideSuggestions(); break
+            case 38: case 40: break;
+            case 9: break;
+            case 13: break;
+            default: 
+            updateSuggestions()
+}}
+    else if (e.type == "keypress") { lastEdit = h.tags.value }
+}
+
+function makeTag(parent, tag, js) {
+    parent.appendChild(document.createTextNode(" "+ tag))
+}
+
+function updateSuggestions() {
+    while (h.suggest.hasChildNodes()) h.suggest.removeChild(h.suggest.firstChild)
+    if(!getCurrentTag() || !currentTag.text) { 
+        hideSuggestions(); return false 
+    }
+    var tagArray = h.tags.value.toLowerCase().split(' '),
+    txt=currentTag.text.trim().escRegExp(), tagHash={}, t
+    for(t in tagArray) tagHash[tagArray[t]] = true;
+
+    var search = tagList.match(new RegExp(("(?:^| )("+txt+"[^ ]+)"), "gi"))
+    if(search){
+        var i;
+        for (i=0; i<search.length; i++) {
+            var tl = search[i].trim()
+            if(tagHash[tl])  continue // do not suggest already typed tag
+            suggestions[suggestions.length] = makeTag(h.suggest, tl, 'complete')
+            suggestions.length++
+    }} 
+    if (suggestions.length > 0) { showSuggestions() } 
+    else { hideSuggestions(); }
+}
+
+function getCurrentTag() {
+    if(h.tags.value == lastEdit) return true // no edit
+    if(h.tags == '') return false
+    currentTag = {}
+    var tagArray=h.tags.value.toLowerCase().split(' '), oldArray=lastEdit.toLowerCase().split(' '), currentTags = [], matched=false, t,o
+    for (t in tagArray) {
+        for (o in oldArray) {
+            if(typeof oldArray[o] == 'undefined') { oldArray.splice(o,1); break }
+            if(tagArray[t] == oldArray[o]) { matched = true; oldArray.splice(o,1); break; }
+        }
+        if(!matched) currentTags[currentTags.length] = t
+        matched=false
+    }
+    // more than one word changed... abort
+    currentTag = { text:tagArray[currentTags[0]], index:currentTags[0] }
+    return true
+}
+
+
+function hideSuggestions() { h.suggest.style.visibility='hidden' }
+function showSuggestions() { h.suggest.style.visibility='visible' }
diff --git a/templates/systemtag/list b/templates/systemtag/list
new file mode 100644
index 0000000..9a7361a
--- /dev/null
+++ b/templates/systemtag/list
@@ -0,0 +1,36 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+
+<table class="taglist">
+[% WHILE objects.size > 0 %]
+<tr>
+    [% SET minilist = objects.splice(0,7) %]
+    [% FOR tag = minilist %]
+        <td>
+        <table><tr> <td width="100%" class="taglistheader">
+        <a href="[%base%]/tag/view/[%tag.name |html|uri%]">[% tag %]</a>
+        </td></tr>
+        [% SET photos = tag.photos %]
+        [% IF photos.last %]
+        <tr><td>
+        <a href="[%base%]/tag/view/[%tag.name |html|uri%]">
+            <img src="[% photos.last.thumb_url |uri%]">
+        </a>
+        </td></tr>
+        <tr><td class="info">
+            [%photos.size %] 
+        photo[%-"s" IF photos.size != 1 %]</span>
+        </td></tr>
+        [% ELSE %]
+        <td><tr>
+        <p><i>(No photos)</i></p>
+        </td></tr>
+        [% END %]
+        </table>
+        </td>
+    [% END %] 
+</tr>
+[% END %]
+</table>
+[% INCLUDE pager %]
+[% INCLUDE footer %]
diff --git a/templates/systemtag/view b/templates/systemtag/view
new file mode 100644
index 0000000..42e885d
--- /dev/null
+++ b/templates/systemtag/view
@@ -0,0 +1,14 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+<h1> 
+[% IF tag.name %]
+[% tag.name %] 
+[% ELSE %]
+[% FOR tag = tags %]
+<a href="[%base%]/tag/view/[%tag.name%]">[%tag%]</a>
+[% ":" UNLESS tag == tags.last %]
+[% END %]
+[% END %]
+</h1>
+[% view_page_of(photos) %]
+[% INCLUDE footer %]
diff --git a/templates/tag/list b/templates/tag/list
new file mode 100644
index 0000000..9a7361a
--- /dev/null
+++ b/templates/tag/list
@@ -0,0 +1,36 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+
+<table class="taglist">
+[% WHILE objects.size > 0 %]
+<tr>
+    [% SET minilist = objects.splice(0,7) %]
+    [% FOR tag = minilist %]
+        <td>
+        <table><tr> <td width="100%" class="taglistheader">
+        <a href="[%base%]/tag/view/[%tag.name |html|uri%]">[% tag %]</a>
+        </td></tr>
+        [% SET photos = tag.photos %]
+        [% IF photos.last %]
+        <tr><td>
+        <a href="[%base%]/tag/view/[%tag.name |html|uri%]">
+            <img src="[% photos.last.thumb_url |uri%]">
+        </a>
+        </td></tr>
+        <tr><td class="info">
+            [%photos.size %] 
+        photo[%-"s" IF photos.size != 1 %]</span>
+        </td></tr>
+        [% ELSE %]
+        <td><tr>
+        <p><i>(No photos)</i></p>
+        </td></tr>
+        [% END %]
+        </table>
+        </td>
+    [% END %] 
+</tr>
+[% END %]
+</table>
+[% INCLUDE pager %]
+[% INCLUDE footer %]
diff --git a/templates/tag/list_js b/templates/tag/list_js
new file mode 100644
index 0000000..af9b159
--- /dev/null
+++ b/templates/tag/list_js
@@ -0,0 +1 @@
+var tagList = "[% FOR tag = tags; tag | html; " "; END %]";
diff --git a/templates/tag/view b/templates/tag/view
new file mode 100644
index 0000000..8ce4707
--- /dev/null
+++ b/templates/tag/view
@@ -0,0 +1,28 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+<h1> 
+[% IF tag.name %]
+[% tag.name %] 
+[% ELSE %]
+[% FOR tag = tags %]
+<a href="[%base%]/tag/view/[%tag.name%]">[%tag%]</a>
+[% ":" UNLESS tag == tags.last %]
+[% END %]
+[% END %]
+</h1>
+<div class="related">
+[% SET stuff = request.tag_select(tags,photos) %]
+[% IF stuff.super %]
+Enclosing tags:
+[% FOR tag = stuff.super %]
+<a href="[%base%]/tag/view/[%tag%]">[%tag%]</a>
+[% END %]
+<br>
+[% END %]
+[% IF stuff.cloud %]
+Inside this tag: 
+[% stuff.cloud.html() %]
+[% END %]
+</div>
+[% view_page_of(photos) %]
+[% INCLUDE footer %]
diff --git a/templates/tagcloud b/templates/tagcloud
new file mode 100644
index 0000000..bd46663
--- /dev/null
+++ b/templates/tagcloud
@@ -0,0 +1,4 @@
+<p align="center" style="border: 1px solid black; background: #eee"> Popular tags </p>
+<div class="htmltagcloud">
+[% request.tagcloud.html(75) %]
+</div>
diff --git a/templates/test b/templates/test
new file mode 100644
index 0000000..b5f5031
--- /dev/null
+++ b/templates/test
@@ -0,0 +1,2 @@
+[% INCLUDE header %]
+[% INCLUDE footer %]
diff --git a/templates/user/album_list b/templates/user/album_list
new file mode 100644
index 0000000..59bcad0
--- /dev/null
+++ b/templates/user/album_list
@@ -0,0 +1,41 @@
+<div class="albums">
+[% IF request.user == user %]
+    <h2> Albums </h2>
+    <form method="post" action="[%base%]/user/edit_albums/[%user.id%]">
+    [% IF user.albums.size > 0 %]
+    <table style="width:100%">
+        <tr>
+        <th style="width: 70%"> Name </th> <th> Private? </th> <th> Delete? </th>
+        </tr>
+    [% FOR album = user.albums %]
+        <tr>
+        <td> <a href="[%base%]/album/view/[%album.id%]/">[% album.name %]</a> </td>
+        <td> <input type="checkbox" name="privacy_[% album.id%]"
+        value="1" [% IF album.privacy == 1 %] checked="1" [%END%] />
+        </td>
+        <td> <input type="submit" value="Delete" name="delete_[%album.id%]"/>
+        </td>
+        </tr>
+    [% END %]
+    </table>
+    <input type="submit" value="Submit changes" name="changes">
+    <hr>
+    [% END %]
+    <h3> Create a new album </h3>
+    Name: <input name="new_name"/> <br>
+    Private? <input type="checkbox" name="new_privacy"/> <br>
+    <input type="submit" value="Create" name="create">
+    </form>
+[% ELSE %]
+
+[% IF albums.size > 0 %]
+    <h2> Public albums </h2>
+    <ul>
+    [% FOR album = albums %]
+    <li> <a href="[%base%]/album/view/[%album.id%]">[% album %]</a>
+    [% END %]
+    </ul>
+[% END %]
+
+[% END %]
+</div>
diff --git a/templates/user/list b/templates/user/list
new file mode 100644
index 0000000..66ba34e
--- /dev/null
+++ b/templates/user/list
@@ -0,0 +1,25 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+
+<table class="userlist">
+[% WHILE objects.size > 0 %]
+<tr>
+    [% SET minilist = objects.splice(0,3) %]
+    [% FOR user = minilist %]
+        <td>
+        [% SET photos = user.photos %]
+        <a href="[%base%]/user/view/[%user.id%]">[% user %]<br/>
+        [% IF photos.last %]
+        <img src="[% photos.last.thumb_url |uri%]"></a><br/>
+        <span class="info">
+            [%photos.size %] 
+        photo[%-"s" IF photos.size != 1 %]</span>
+        [% ELSE %]
+                <p><i>(No photos)</i></p>
+        [% END %]
+        </td>
+    [% END %] 
+</tr>
+[% END %]
+</table>
+[% INCLUDE footer %]
diff --git a/templates/user/view b/templates/user/view
new file mode 100644
index 0000000..b3cadec
--- /dev/null
+++ b/templates/user/view
@@ -0,0 +1,7 @@
+[% INCLUDE header %]
+[% PROCESS macros %]
+<h1> [% user.name %] </h1>
+[% INCLUDE album_list %]
+
+[% view_page_of(photos) %]
+[% INCLUDE footer %]
-- 
2.39.5