
This is the first STABLE release of JSPWiki v2.2  

Most of the documentation is now contained in jspwiki_samplepages.zip

Major changes since the 2.0 series are:

- Much simplified templating (see WikiTemplates)

- Wiki Forms

- Page Filters (including SpamFilter)

- Muchos enhanced WeblogPlugin

- Style support using the %%-directive

- Easier templates

- The default template now validates as XHTML 1.0 Transitional

- Page variables (see SET-directive), also accessible on pages

- Caching attachment provider integrated

- OSCache integration

- Printer-friendly stylesheet for the default template

- Multiple Wikis with a single WAR-file -support.

- In-page hyperlinks and TableOfContents

- Multiply nested links now work

- Much faster startup (after the first one)

- Short URLs (/wiki/PageName) with ShortURLConstructor


UPGRADE NOTES
=============

Upgrading from 2.0:

* Please reinstall in a new directory.  Then move your modified
  templates into the new templates/ -directory.  You MUST
  have the default template in place, else things might not
  work.
* Replace jspwiki.properties with your old configuration file.
  It should run unmodified, though you might want to go through
  the new file to see new options.

Upgrading from earlier installations:

* Please make a complete reinstall.  Your wiki pages will still be
  compatible, and the configuration for the most part.

Please visit http://www.jspwiki.org/Wiki.jsp?page=Release2.2Discussion
for further information.


KNOWN MAJOR ISSUES
==================

* Documentation needs cleanup; parts of it are out of date, etc.


EXPERIMENTAL FEATURES
=====================

There are some features in this release which could mostly be considered
experimental at best.  The following ones are known to work only 
partially:

* Atom support.  We can give out feeds in Atom 0.3, but it's not really
  tested properly.  There's also preliminary APP support, but it does 
  not work.
  
* WYSIWYG editing.  You need to install FCK by yourself.  It sort of
  works, but not quite.
  
* Install.jsp.  It's still a bit experimental, though it should work...

* WebDAV support.  This is known to be broken on pretty many levels...

* XHTML -> WikiMarkup translation.  Spotty, but should work for the most
  part.
  

NOTE ABOUT AUTHENTICATION
=========================

This JSPWiki version includes an unsupported version of Authorization
and Authentication.  AAA was supposed to be the major feature of the
2.2 release, but unfortunately it turned out that the solution chosen
was crappy and the coder (me) did not know what he was doing.  This
dragged the work for the 2.2 release behind for many months, as I was
not really interested in doing it.  So I decided to discard the entire
solution and settle for something simpler.  This work is still
ongoing, and a new solution is being drafted.

The old auth system is still in place, but it is completely deprecated
and largely undocumented.  You may use it if you want, but please do
not report any bugs regarding it.  You can enable it by putting
"jspwiki.auth.useOldAuth=true" in your jspwiki.properties.
