<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<status>

  <changes>
    <release version="0.3" date="not-released">
      <action type="update" context="code" dev="DC">
        Enable "albuminfo" to contain links and other markup.
      </action>
      <action type="update" context="code" dev="DC">
        Use the "albuminfo" to set the title and description of each gallery.
      </action>
      <action type="add" context="code" dev="TWW">
        Added a gallery/index page that lists the multiple galleries.
        Enabled albums to contain metadata.
        Automated the image variant (e.g. thumb, small) creation. Note that this
        is not
        backward-compatible, so existing users need to move original images
        from the old "big" directory and remove the "preview" and "small" directories.
      </action>
    </release>

    <release version="0.2" date="not-released">
      <action type="add" context="code" dev="RDG">
        Use locationmap for resolution of resources and files. Resources are exposed via
        {lm:photoGallery.*}
      </action>
    </release>

    <release version="0.1" date="not-released">
      <action dev="RDG" type="fix" context="docs" fixes-bug="FOR-519" due-to="kevin">
        Use "alt" motd position to prevent the motd overlaying the image.
      </action>
      <action dev="RDG" type="update" context="admin">
        Renamed to bring into line with naming conventions.
      </action>
      <action dev="RDG" type="add" context="code">
        Added link back to index page and provide some text for links to next
        image and larger/smaller image.
      </action>
      <action dev="RDG" type="update" context="code">
        Changed method of identifying pictures, it no longer users request
        parameters, therefore it will work in a statically generated site as
        well as in a webapp.
      </action>
      <action dev="RDG" type="add" context="docs">
        Added some sample pictures.
      </action>
      <action dev="RDG" type="add" context="docs">
        Added basic documentation.
      </action>
      <action dev="RDG" type="add" context="admin" due-to="Jorg Werner" fixes-bug="FOR-387">
        Initial plugin code.
      </action>
    </release>
  </changes>

  <todo>
    <actions priority="high">
      <action context="docs">
        Create the documentaiton with lots of examples and samples.  
        XML content goes in
        <code>src/documentation/content/xdocs</code>.
      </action>
      <action context="docs">
        Remove outpmap.xmap and replace it (if necessary) with resources.xmap)
      </action>
      <action context="xmap">
        requesting http://localhost/gallery/lena/ without index.html is not yet
        matched
      </action>
      <action context="xmap">
        Implement the comment.xml feature (merge the xml from the
        imagedirectory-generator and the comment.xml)
      </action>
    </actions>
    
    <actions priority="medium">
      <action context="xsl">
        I tried to align the left- and right arrows vertically in the table (using
        valign="middle") but this didn't work. Maybe some of the html gurus can fix
        this.
      </action>
      <action context="xsl">
        what is the required syntax for links and images &lt;a&gt; and &lt;img&gt; or &lt;link&gt; and
        &lt;figure&gt;, document-v20.dtd seems to allow both?
      </action>
      <action context="xsl">
        Implement tool-tip infos
      </action>
      <action context="xsl">
        Implement a template facility for the picture page (so you can change the
        layout, right now everything is hardcoded in gallerypicture.xsl).
      </action>
    </actions>
    
    <actions priority="low">
      <action context="xmap">
        Test other image types other than jpg.
      </action>
      <action context="xsl">
        Implement reading of exif data in cocoon imagedirectory-generator
      </action>
    </actions>
  </todo>

</status>
