*******************************************
** CPSSkins V2.10.0 [R1 build 2006/03/03-17:30 by ben]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 33855
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
-
Bug fixes:
~~~~~~~~~~
- Add new layout, horizontal_box_notitle to handle right/left/center
  items alignment;
- Plone2: the macroless skin was missing.

New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- added the hability to purge the method_theme property

*******************************************
** CPSSkins V2.9.1 [R1 build 2006/02/17-20:48 by fermigier]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 33086
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
-
Bug fixes:
~~~~~~~~~~
- Fix some unit tests.
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
-

*******************************************
** CPSSkins V2.9.0 [R1 build 2006/02/17-20:25 by fermigier]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 32986
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
- #1365: added new CSS properties to font shape, font color, form style.
Bug fixes:
~~~~~~~~~~
- #1343 sessions have been replaced by cookies to store transient information.
- cps-3.3 is no longuer set as default (since 'default' is already the default
  theme) in the 'cps3' profile
- #1369: "Unused portlets" page was broken
- part of #1290: remove empty space in folder_view -> move contentwell templet
  above main_content templet
- #1358: replaced RSS templet/portlet with a WAI templet/portlet
- #1392: Main Content Templet was not rendered inside cell block in macroless
         mode. The templet was not visible in editing mode either.
- #1315: enabled visibility creteria for Plone2 w/ Linguaplone
- #1415: implement GenericSetup I/O for Method Themes used by portal_themes
- the Main Content templet did not pass options from the calling template
- Main content templet: added the header and the sub slot.
- the templet's title is not inserted in the templet's 'title' attribute 
  since it can trigger a UnicodeDecodeError.
- string values returned by getViewMode() were encoded in unicode
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- added extension profile for themes to be used by CPS
- the effective theme and page information is cached in the REQUEST
- the portlet cache is cleared when exiting the theme manager.

*******************************************
** CPSSkins V2.8.0 [R1 build 2006/01/23-17:31 by fermigier]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 31976
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
- #928 added a label for the current screen name (portlet editor / theme editor)
- #1024 fixed the tableless renderer when no cell width is specified
- #1077 portlets that are invisible because of the portlet guard are visible
  in the portlet editor.
- GenericSetup-based import/export of themes. Requires GenericSetup >= r41050
Bug fixes:
~~~~~~~~~~
- Fixed redirection in cpsskins_setcookie if the referer is ''.
- Made the "CPS3 Default theme" tabs behave well with very short and very long
  titles (from 1 to 100 letters).
- #821 the search box templet in the CPS3 default theme is no longer set in the
  cache for one hour by default.
- #1165 Added a 'content_well' slot in the 'printable' and in the 'autumn'
  themes
- Fixed #1149: provide easy navigation between the theme tool management screen
  and the portlet management screen through links and accesskeys.
- Added a permission check on the access to the Portlet editor.
- #1210 fixed bullets display problem and converted all icons and backgrounds
  in the default theme to PNG
- #1274 fixed the rendering of the portlet box edit form
- Removed dependency to CPSBoxes property cps_is_portalbox in profile
- expire the cache entries when the portlet box templet is updated.
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- Got rid of some warnings in test output.
- Removed support for CPSBoxes, updated the default CPS3 theme to have it
  work without boxes.
- Improved session behaviour by avoiding potential conflicts when nothing
  interesting is actually in the session.
- CPS css_slot was renamed style_slot to comply with later CMF/Zope 3 standard.
- i18n: upgraded to i18ndude 2.0 - updated the Makefile's i18n section
- Changed ImageBox templet to always store its image as a subobject.

*******************************************
** CPSSkins V2.7.0 [R1 build 2005/11/07-15:26 by fguillaume]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 29058
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
- updated Brazilian Portuguese translations (Thanks to Mario Olimpio de Menezes
  <mario [at] curiango.ipen.br>)
- added invisible Text Templets with <div id="content"/> and <div id="menu"/>
  for accesskeys targets in CPS3-Default theme.
Bug fixes:
~~~~~~~~~~
- PortalBoxGroup render method crashed translating the box title if string
  could no be encoded in iso-8859-15.
- #1026 added missing utool declaration.
- #1050 the theme optimizer proposed the deletion of styles used by theme pages
- Fixed PortalThemesTool.renderAccessKeys so that it produces XHTML 1.0 Strict
  valid output.
- Added support for rendering accesskeys defined in an external CPS vocabulary.
  This fixes #983.
- #1095 replaced CSS3's 'overflow-x' with 'overflow' in the tableless renderer.
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
-


*******************************************
** CPSSkins V2.6.0 [R1 build 2005/09/21-15:22 by fguillaume]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 27306
Requires:
~~~~~~~~~
- TranslationService > 0.9.1
New features:
~~~~~~~~~~~~~
-
Bug fixes:
~~~~~~~~~~
- moveToLostAndFound() did not get the correct container of objects
  moved to the lost-and-found folder.
- Box states were not set properly on boxes (drawer box layout) because
  the page's id was missing.
- getIcon(relative_to_portal=1) instead of getIcon() was called on some CMF
  type information.
- avoid raising UnAuthorized exceptions when users are not allowed to manage
  portlets in a given folder.
- removed the base url before ti/getIcon
- portlet editor: url fix in virtual hosting
- the id generator did not check for reserved ids.
- fixed typo in BaseStyle.edit() (missing ** between keyword arguments)
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- CPS3: The Main Content Templet can be rendered in macroless page mode. (#834)
- the id of duplicated themes / pages can be entered by users  #929
- add a doctype slot within the main_template

*******************************************
** CPSSkins V2.5.0 [R1 build 2005/08/05-13:58 by ben]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 25426
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
-
Bug fixes:
~~~~~~~~~~
- triggering persistence in manage_setMethodThemes() when the method theme
  dictionary has been modified.
- fixed the CSS rendering of box corners when not all background images
  are specified. (#785)
- misc Plone2.1 fixes (breadcrumbs, new panel template)
- Updated the pt_BR translations.
- Made the searchbox more accessible by associating its label with the text
  input.
- fixed getLocalThemeName() after security synthesis in CPSCore (#413)
  and refactored the traversal.
- macroless pages where not rendered in macroless mode.
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- support for ERP5 sites (by Yoshinori Okuji)
- added a 'Cache' management option in the ZMI to set cache settings for
  the Image Box Templet (e.g. Accelarated HTTP Cache Manager)
- local themes can be set at the portal root
- Switched to the XHTML Strict doctype under CPS3.
- Using the same cpsskins_RecentDocuments.py for both CPS3 and CMF.
- Using the new CPS3 URLTool API (getBaseUrl, ...) with backward compatibility.

*******************************************
** CPSSkins V2.4.0 [R1 build 2005/06/02-09:38 by fguillaume]
** SVN URL: https://svn.nuxeo.org/pub/CPSSkins/trunk Revision: 22058
Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
- Added a shortcut button ('+') in the theme tabs for adding new themes.
- Added tabs in the portlet editor to switch between themes and pages.
Bug fixes:
~~~~~~~~~~
- cpsskins_cps3/cpsskins_getNavigationInfo.py: better traversal to obtain
  root proxy folders.
- Made cell block editing less modal: the layout of cell blocks can be edited
  even if they are not selected.
- Made the installer more robust on how to find CPSSkins .po files.
- duplicating the default theme should not lead to having 2 default themes.
- fixed a bug where style items pasted from another theme were renamed
  after being pasted.
- removed bare except: in Extensions/install_actionicons.py
- fixed pageblock layout rendering in macroless mode.
- Collapsible Menu Templet: more robust computation of relative urls.
- Strict XHTML compliance in the rendering of cell blocks.  
- added missing kw 'portlet' argument needed for the rendering of global  
  portlets boxes.
- fixed crash under CPSSharedCalendar / Five in the lookup of method themes.
  Also getThemeByMethod() is not called in case the id of the published object
  could not be obtained.
- Buttons in the box title bar should not be displayed for anonymous users.
- Pastable objects located in a non-existent themes triggered an AttributeError
  exception.
- i18n of box titles: making sure that the string is in unicode before encoding
  in ISO-8859-15
- checking the existence of 'msgcmp' before running the 'TestOneMsg' tests.
- Portlet editor: fixes to avoid having URLs beginning with '//...'
- Portlet editor: the information about overriden portlets was incorrect in
  'Site structure' mode. Portlets are now sorted by slot (fixes #695)
- The navigation tabs are now also displayed in 'Site structure' mode
  to make it possible to switch between theme and pages.
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- better caching of the base url.
- Check CPS3 instance by checking the isntance type instead of the meta_type
- the "Frame Box" layout now uses the <fieldset> markup
- CMF / Plone: folder roots under the portal are now listed.
- Portlet box states (min/max/closed) can be set by anonymous users.

*******************************************
** CPSSkins V2.3.3 [R1 build 2005/04/13-10:31 by ben]

Requires:
~~~~~~~~~
-
New features:
~~~~~~~~~~~~~
-
Bug fixes:
~~~~~~~~~~
-
New internal features:
~~~~~~~~~~~~~~~~~~~~~~
- use nuxeo packaging tools


CPSSkins - the visual theme editor for CMF, CPS and Plone. Version 2.2
--------------------------------------------------------------------------


CPSSkins 2.3.0 (development)
Released: 2004-08-xx

- Added a Portlet Box Templet.
  To be connected to CPSPortlets.

- Updated the meta "generator" name to "CPSSkins 2.3"


==========================================================================
CPSSkins 2.2 (stable release)
Released: 2004-08-30

- i18n: 
  added Brazilian Portuguese translation
  (Thanks to Mario Olimpio de Menezes <mario [at] curiango.ipen.br>)

  added support for PO filenames written as '...-xx_XX.po' (needed for
  pt_BR.po). i18n tests have been updated too.

  fixed the internationalization in the Document Info Templet options.

- Bug fix:
  New images could not be uploaded to the Image Box when the Templet
  was in the internationalized mode.

- Theme editor / RAM cache:
  The current language was not set correctly in the theme edition mode which 
  would pollute the cache with content in the wrong language.

  The RAM caches now also get cleared when entering and exiting the theme 
  editor since the character coding may be different (cf. Plone).

- Updated the meta "generator" name to "CPSSkins 2.2"


==========================================================================
CPSSkins 2.2-rc5 (release candidate)
Released: 2004-08-24

- RAM cache / ZEO:
  Changes performed on a theme are now spread through all ZEO instances.

  When an object is modified its cache expires with the modification date
  stored in the ZODB and the local RAM caches in each ZEO instance will be
  invalidated if the last cache update was performed before the modifications.

  This ought to work with ZEO servers located in different time zones
  since the time is the Universal Time (UTC).

- Bug fix:
  The path of an object instead of its ID is now used to identify an object
  in the RAM cache, since identical IDs within different folders are allowed
  to make it possible to edit themes directly through the ZMI. 

- UID checking:
  Objects with UIDs beginning with 'copy_of_' get a new ID.

- When copying a style from one theme to another, the default styles of
  the destination theme are now preserved.

- added a strip() to remove extra leading and trailing spaces in action urls
  which prevented them from being set as selected.

- fixed the creation of style through the contextual menu.

- CMF/Plone:
  Fixed an acquisition bug, if the portal site's name is the same
  as a given theme id under 'portal_themes'.

- Plone2:
  Removed an expensive call from the main_template.pt: 
  "allowedSortedContentTypes python:here.sortObjects(here
   .allowedContentTypes())" that had been moved to its own macro in 
  Plone 2.0-RC3. This improves rendering times significantly (~ -0.4s).

- Plone1:
  Fixed the breadcrumbs (added missing cpsskins_getBreadcrumbs.py file).

- Imagebox:
  The image cache (Zope) now gets invalidated when the Image box has been
  edited.

- Automatic browser detection:
  Fixed a bug where the 'default' theme renderer was always selected in 
  'automatic mode'.

- Installation:
  The skins are now reinstalled when 'cpsskinsupdate' is run. This is needed
  if products were added after CPSSkins.

  Migration:
  Old cache attributes are now being deleted when migrating from a previous
  version.

- Theme editor / UI:
  The 'toggle' button that minimizes a Templet is now only shown in 
  the 'layout' mode since minimized Templets are not visible in the other
  modes.

- Uploading new images (icons, background) now also works on Windows with
  filenames beginning with C:\\...

- Themes:
  Themes have been updated.
  The "CPS3 Default" theme has been made more like CPS3's default theme.

- Fixed some compatibility issues with CMF1.3 / CPS2 during installation.

- i18n: added missing translation for the style of the SearchBox.


- fixed the value context_rurl passed to a "broken" Templet to avoid
  crashing the theme editor.

- Documentation:
  Moved all the documentation to the 'doc' directory.
  Added an UPGRADE.TXT and a DEPENDENCIES.TXT file.
  Added some information in TESTING.TXT about memory leak detection.

- Tests:
  New tests.
  All tests now pass on Plone2, CMF-1.4, CPS3.


==========================================================================
CPSSkins 2.2-rc4 (release candidate) 
Released: 2004-08-17

- Compatibility with CMF 1.5

- Fixed security settings for newly created objects.

- Rewrote some hardcoded URLs into CMF actions.

- The RAM cache is not implemented on a theme level. This solves thread
  issues where more than one RAMCache instance was created per theme.
  Each theme now acts as its own cache manager, the cache architecture
  being very similar to StandardCacheManagers/RAMCacheManager.py .

  Fixed the cache index for the Portal Box showing pending documents.

- Added new tests (there are now approx. 200 tests)
  All tests now pass on CMF / CPS3
  Some tests fail on Plone because of an action that does not check
  whether 'folder' has the 'displayContentsTab' attribute.
  folderContents: 'python: folder.displayContentsTab()

- Added a new theme under Plone2 ('Autumn theme') ported from CPS3.

- Theme objects are no longer 'CMFCatalogAware'
  They are based on 'SimpleItem' and 'DynamicType' instead.

- Code cleaning, better docstring documentation ...


==========================================================================
CPSSkins 2.2-rc3 (release candidate) 
Released: 2004-08-12


- RAM cache:
  Improved the RAM cache granularity on CMF actions. The cache index key
  for action Templets is now restricted to the actual action categories that 
  are being displayed.

  When displaying actions the current URL is added to the index if it 
  corresponds to the URL of an action (this is needed to make a distinction
  between "selected" and not "selected" actions)

  Fixed the PortalTab Templet's cache index.
  
  Added a central cache management page that displays statistics for each 
  theme.

  Information about orphaned Templets is now displayed with the possibility to
  remove them from the cache.
  Orphaned Templets are objects that have stale entries in the cache, 
  because the object associated with these entries no longer exists or 
  because it is no longer cacheable. They result in memory leaks. In principle
  memory leaks can only be created when themes are edited from within the ZMI. 
  Otherwise the theme editor takes care of invalidating the cache entries of a 
  Templet whenever changes are performed on it (deletion, ...)

  Bug fix:
  Made the RAMCache a UniqueObject. The cache's id would be overridden between
  portals otherwise.


- API:
  Renamed the 'meta_type' attribute associated to styles as 'style' to
  avoid confusions


- i18n: 
  renamed the msgid "_Name_" to "_Username_" and "_Theme name_" since
  it was used in different contexts.

  The 'Guest' username now gets translated.

  Updated the Italian translation to 2.2-rc3 (thanks to Fabio Nosari).


- CPS2/CPS3:
  Removed the vertical_padding option in Portal Box Groups. 
  The 'padding' property inherited from BaseTemplet is used instead.


- Tests:
  Added new functional tests (now totalling 96)

  Removed the exceptions caught in the SiteError 'error_log' when setting up
  tests since they broke some functional tests under Plone.

  Fixed the ZChecker test.

  Fixed some tests under Zope-2.7.2


- Bug fix:
  Fixed the 'visible up till ...' visibility option


- Plone2:
  Added a "tal:on-error" condition when displaying macros (Plone portlets)


- CMF/Plone:
  Fixed the navigation information (using 'listFolderContents()' to obtain 
  folder contents in Plone) and 'contentValues()' in CMF. 


- Code cleaning and simplifications.



==========================================================================
CPSSkins 2.2-rc2 (release candidate) 
Released: 2004-08-09


- RAM cache:
  Completed the implementation of the RAM caches (Templets, Javascript, CSS)
  All RAM caches are now 100% non-persistent and thread-safe.
 
  The RAM cache has been placed under the 'portal_themes' tool, its 
  structure is :

  - portal_themes
      - theme1
          - templets (RAMCache)
          - css (SimpleRAMCache)
          - javascript (SimpleRAMCache)

      - theme2
          - templets
          - css
          - javascript
      ...

  Added a page in the ZMI that displays RAM cache statistics for each theme
  to help fine-tune the cache parameters with:
 
  - Templet name
  - Number of entries in the cache for this Templet
  - Total size (KB) 
  - Cache lifetime (s) 
  - Last cleanup

	

- Crash shield:
  Added a crash shield that displays a "Broken Templet" instead of crashing the
  entire page.

  Templets can crash for two reasons: either because of a bug or because a theme
  has not been rebuilt properly after an upgrade. The crash shield makes it
  possible to rebuild themes through the Web from inside the theme editor 
  instead of doing it through the ZMI.

  If the rendering of a given Templet fails, the Templet will be rebuilt 
  on-the-fly before being rendered again. If rebuilding the Templet fails
  or if the attempt to render the Templet fails again, a 'Broken Templet' box 
  will be displayed instead --- with a link to the error log.

  This fallback mechanism makes it possible to rebuild Templets as soon as they
  are displayed. But it also simplifies and speeds up the code that renders  
  the Templets since existence checks on attributes no longer need to be 
  performed.


- ESI (Edge-Side-Includes)
  If ESI-support has been enabled for a given theme, an ESI HTTP header 
  will be set:

      Surrogate-Control: max-age=30+60,content="ESI/1.0"

  The use if ESI is independent of the theme renderer (default, compatible,
  automatic, text mode, ... )

  All Templets are "ESI-compliant", they can be called directly with a
  'context_rurl' parameter if needed.


- Bug fixes:

  CPS3: added missing "main" slot in emptybody documents (e.g. popup windows)
  Thanks to Steve Meaker (stevem [at] manitacc.com)

  Theme chooser: theme names are now displayed.

  Calendar Templet:
  The "Use session to remember calendars state" (set in the 'portal_calendar'
  preference page) can now be used under CMF/CPS/Plone. (This will not work
  when using the original Plone calendar portlet)

  Navigation CMF/Plone:
  Added a couple of permission checks ('List folder contents', 'view') 
  when performing folder listings.

  Added a script that invalidates the RAM cache when exiting the theme editor.
  This is needed because the character coding might be different in edit mode
  (e.g. latin1 / utf-8) and some Templets remained in the cache with the
  wrong character coding.
 

- CSS:
  Collapsible menus can now be aligned as expected (left / center / right)

  Calendars are not alignable anymore since the horizontal alignment 
  makes no difference for them.

  The SearchBox is not alignable anymore.


- Optimizations: 
  Moved some logic out of main_template_... and into BaseTemplet.py
  (improves rendering times by about 1-2%)


- Accessibility:
  Added alt="..." information to image boxes (the Templet's title)


- i18n:
  Templet type names in the toolbox now get translated.


- CPS2/CPS3:
  For Templets displaying navigation items, the list of starting paths 
  is now restricted to objects located under the selected base.
  For instance:

  if the folder base is 'sections', only the paths beginning with 
  '/sections/...' will be displayed (and not '/workspaces/...' or '/')


- Tests: 
  Added more tests.

  Added patches for CPS3 and Plone2 to apply to CPSTestCase and to
  PloneTestCase to run CPS3's or Plone2's unit tests on top of CPSSkins.

  Added a ZChecker test for the skins.

  See Misc/TESTING.TXT for further information.


- Profiler:
  The profiler output has been made more legible, showing page blocks and
  Templets titles. CPSSkins objects are marked with a 'CPSSkins:' prefix.

  Rendering times are displayed next to each Templet.
  Cached Templets are rendered in virtually 0 seconds (i.e. below the 
  profiler's time precision)
  

   0.0000: Start
   0.0000: --------- [top] ----------------------------------  + 0.0000
   0.0100: CPSSkins: banner..................................  + 0.0100
   0.0300: CPSSkins: Theme Chooser Templet...................  + 0.0200
   0.0300: CPSSkins: welcome box.............................  + 0.0000
   0.0400: CPSSkins: search box..............................  + 0.0100
   0.0400: CPSSkins: flags...................................  + 0.0000
   0.0400: --------- [Navigation] ---------------------------  + 0.0000
   0.0500: CPSSkins: level1..................................  + 0.0100
   0.0800: CPSSkins: actionbox...............................  + 0.0300
   0.1000: CPSSkins: Breadcrumbs.............................  + 0.0200
   0.1000: --------- [Main Columns] -------------------------  + 0.0000
   0.1000:           Main Content............................  + 0.0100
   0.1100: CPSSkins: Last modified...........................  + 0.0100

   ...

   0.1100: CPSSkins: footer..................................  + 0.0100
   0.1100: Stop 




==========================================================================
CPSSkins 2.2-rc1 (release candidate) 
Released: 2004-08-03

Changes:

- RAM cache:
  Fine-tuned the cache index for higher effectivity and lower RAM usage.

  Plone2: added support for PloneLanguageTool. 
  The language code index used in the RAM cache is first obtained from the 
  preferred language in PloneLanguageTool (if installed), or from 
  HTTP_ACCEPT_LANGUAGE if PloneLanguageTool is not installed.

  CMF/Plone1/CPS3: The language code index is obtained from (Localizer if 
  installed) or from HTTP_ACCEPT_LANGUAGE if Localizer is not installed (CMF).

- Theme optimizer:
  The theme optimizer can now inform the user about Templets that are not using 
  currently the cache with an option to enable it. 


- CSS RAM cache 
  The CSS cache gets invalidated whenever it is required (style creation,  
  Templet creation, deletion, duplication, theme rebuild ...)

  The CSS cache also accepts keywords (e.g. ns4=1, ie6=1, css=level3, ...) 
  that are used to construct an aggregated index for accessing the cache.
  These keywords are then passed on to the script that renders the CSS code.
  This makes it possible to remove the logic from the stylesheet language 
  (a.k.a. CSS hacks) and put it instead inside DTML or PythonScript.

  The CSS rendering method uses a modified version of 'slimmer.py' from 
  CheckoutableTemplates to reduce the size of the CSS file (by ~5-10%).


- Javascript RAM Cache
  The javascript code used by some Templets is now inserted in the page header.
  The URL is called .../portal_themes/<theme_id>/renderJS

  The javascript code is stored in a RAM cache and can be invalidated with the
  'invalidateJSCache()' method.

  If several Templets are using the same javascript code, the code will only  
  be generated once and if no Templet uses Javascript at all then no code 
  will be generated uselessly.

  Like the CSS RAM cache, the JS RAM cache also accept parameters that are
  passed on to the scripts used to render the JavaScript code 
  (typically DTML, or ZPT)


- Calendar Templet:
  It is now possible to display several Calendars on a same theme.

  The Calendar Templet has been internationalized (i.e. month names and 
  weekday abbreviations).

  The previous/next month redirection has been rewritten to not include
  the current URL. This reduces the size of the RAM cache and speeds up 
  rendering since the links need not be computed until the user actually
  clicks on them.


- Plone2:
  The 'breacrumbs.py' script in CMFPlone is used to get the breadcrumbs
  information (title, url).
  This closes a couple of bugs encountered  with third-party CMF/Plone
  products.
 
  The action titles in the Action Box Templets are now translated correctly.
  

- Theme editor:
  The theme editor now displayed the cached version of the Templets for better
  responsiveness.

  The style preview screens have been internationalized.

  The 'Simulate this URL ...' option that allows to test the visibility of
  Templets and Cells based on URLs no longer appears in layout mode.
  It is only present in 'WYSIWYG' mode and in the 'mixed' mode.
  
  Page Blocks can now be inserted at the top of the screen.

  Default styles:
  A default style can be defined for each style category. Default styles 
  are automatically assigned to newly created Templets. If no default style
  is defined for a given category, the first available style in the category 
  will be considered as the default style.


- Portal Box Templet:
  Added an 'Upcoming events' box and a 'Pending documents' box.

  CMF/Plone:
  Documents without title (a.k.a 'empty documents') no longer appear 
  in folder listings.


- Document info:
  The last modification date is now displayed using the ISO date format.


- Installation / migration:
  The old cache ('cpsskins-templet-cache' and 'custom/cpsskins_render')
  will be uninstalled.

  Themes are now automatically rebuilt during migration.


- Tests: 
  Added tests for all three i18n domains ('cpsskins', default', 'plone')
  (freely adapted from plone-i18n :
  http://cvs.sourceforge.net/viewcvs.py/plone-i18n/i18n/tests/ )
  msgfmt.py is taken from PlacelessTranslationService


- Themes:
  All themes have been updated to match the current release.
  The RAM cache lifetimes have been fine-tuned, but the cache is not
  enabled on URL-dependent Templets. 

  Default styles have been defined.

  CPS3: updated the 'LightSkins' theme.


- Tested with:
  - the latest CMF (1.4.6) and Zope 2.7.2 
  - Plone cvs 2004-08-01 (upcoming 2.0.4 release)
  - CPS3 cvs 2004-08-01 (upcoming 3.1.5 release)

  CPSSkins also works with older Zope versions (tested with 2.6.1)
  and python 2.1


==========================================================================
CPSSkins 2.1.10 (development version) 
Released: 2004-07-27

Changes:

- RAM Cache
  The RAM caching mechanism has been refactored. The Zope RAM Cache Manager 
  is no longer involved and every Templet uses a built-in cache instead.
  The efficiency of the cache has been improved and URL-dependent Templets
  can now be cached.
 
  The caching of Templets is now determined by a collection of variables 
  that are needed to discriminate between users, urls, languages, etc. which 
  typically are REQUEST variables. 

  The list of variables changes dynamically depending on the Templet's 
  own properties.

  For instance the Breadcrumbs Templet uses:
  - the id of the authenticated user (AUTHENTICATED_USER)
  - the current path (PATH_TRANSLATED)
  - the code of the selected language only if the Templet can be translated.

  This information is returned as a tuple by the Templet using the
  'getCacheIndex()' method. The result is then used as an aggregated
  index to access the cache dictionary.

  The Templet's cache only gets invalidated when the cache's lifetime
  has expired or when a Templet has been edited (no cleaning is otherwise
  performed on a regular basis). Statistics should therefore be checked for 
  memory usage during the fine-tuning process to avoid consuming too much RAM.


- Caching of style sheets:
  The CSS document generated by CPSSkins is now cached in RAM for faster
  rendering (typically 0.01 to 0.05 seconds per request)
  This also makes it possible to put more logic within the CSS generation
  and to reduce the size of the stylesheets.

  The CSS RAM cache is only refreshed when invalidated, i.e. basically
  when a style has been edited.


- Cache manager:
  The internal RAM cache no longer needs to be turned on to start operating.
  The determining factor is now whether a Templet is cacheable or not.

  To force the cleaning of the cache of all Templets it is possible to use
  the "Clear the cache" button.


- CPS3:
  Added a 'Display hidden folders' option to the Portal Box Templet in 
  'folder' mode. If the option is turned on, hidden folders will be 
  displayed, but rendering will be faster since the getContent() method
  will not be called and only CPS3 proxies will be used. 


- UI:
  Menus tabs, Templet boxes and buttons in the theme editor now have rounded 
  corners under Mozilla, Firefox (using the -moz-border-radius CSS extension)


- i18n:
  Added German translation of CPSSkins 2.1.9 (thanks to Stefan Undorf)

==========================================================================
CPSSkins 2.1.9 (development version) 
Released: 2004-07-25

Changes:

- Optimizations: 

  Theme editor:
  The theme edition pages have been optimized for faster rendering (mostly ZPT)

  Plone2:
  CMF actions are now stored in a session variable as with CMF/Plone1/CPS2/CPS3.
  This had been overlooked in skins/cpsskins_plone2/main_template.pt which 
  slowed down theme rendering under Plone2 since 'listFilteredActionsFor(here)'
  needed to be called for every Templet that used CMF Actions.

  The code that renders the Action Box with CMFActions has been refactored.
  

- Enhanced RAM Cache:
  
  The caching mechanism has been refactored for better granularity control:
  Enabling the cache can easily improve performance by 20-40% which makes 
  CPSSkins extremely fast (typically 0.1s to 0.2s per request under CMF/CPS3)

  Individual caching of Templets:
  It is now possible to set an individual cache lifetime ranging from 
  5 minutes to 1 hour on every Templet (higher values are not realistic).
  Logos, footers and static parts' lifetimes can be set to 1 hour.
  News boxes, folder menus and the calendar can be assigned a lifetime of 
  15 or 30 minutes.
  All cache entries corresponding to a given Templet are invalidated when
  when the Templet's cache lifetime expires.
  
  I18n:
  RAM caching now also works with multilingual sites. 
  A session variable called 'cpsskins_language' is set to the language code of
  the selected language. It is obtained from the 'LOCALIZER_LANGUAGE' http 
  cookie value if Localizer is installed. Otherwise the first entry of 
  'HTTP_ACCEPT_LANGUAGE' is used.
  
  The actual caching is done by calling a script ('.../custom/cpsskins_render')
  to render the Templets instead of calling templet.render() directly. 
  The 'context' value is used to discriminate between Templets.
  Two other session variables are used: 'AUTHENTICATED_USER' to discriminate
  between users and 'cpsskins_language' for the multilingual sites.

  The 'PATH_TRANSLATED' variable is not currently being used. As a consequence
  URL-dependent Templets (Breadcrumbs, About Box...) cannot be cached.
  But in most cases this makes no difference on performance unless the 
  site consists of only 5 or 10 pages. A possible future implementation would
  be to use a specific RAM cache for URL-dependent Templets. 

  Templets that cannot be cached using this method because they rely on macros 
  (Main Content, Portal Box Groups) are no longer shown as cacheable.


  Cache manager:
  The cache management page has been redesigned to include cache lifetimes.

  Statistics are displayed to inform on the cache memory usage and 
  its effectivity calculated as: (initial entries are counted as misses)

      (hits - misses + entries) * 100 / (hits + misses) 

  A button has been added to invalidate the cache (named as 'Clear the cache')
  to remove all entries.


- ESI (Edge-Side-Includes)
  Initial support has been included for Edge Side Includes.
  Templets marked as 'ESI fragments' are rendered as a <esi> directives.
  
  ESI must first be enabled in the theme's settings.

  The implementation is not complete:
  - not all Templets can be rendered as fragments yet.
  - the ESI header ('Surrogate-Control','...,content="ESI/1.0"')
    is not set yet.


- Customization:
  The static stylesheets used be CPSSkins ('cpsskins_common.css' and  
  'cpsskins_common-css2') have been moved to the site root for easier 
  customization. These contain CSS properties that are not generated from
  styles.


- User interface:
  Newly created themes are now initially displayed in layout mode.

  The green "Add ... " buttons have been redesigned.

  An icon is now used to represent External Themes.

  A shortcut to images (backgrounds & icons) has been added inside the style
  edit form.


- i18n:
  updated the Italian translation (thanks to Fabio Nosari)


==========================================================================
CPSSkins 2.1.8 (development version) 
Released: 2004-07-22

Changes:

- Optimizations:
  The edit form displayed in theme edition mode has been optimized, 
  it has a much better responsiveness.


- Bug fixes: 
  ImageBox: 
  fixed an acquisition bug that made it impossible to edit some image boxes.

  Cache manager: 
  finalized the code to reflect API changes introduced in 2.1.7
 
  Theme optimizer: 
  finalized the code to reflect API changes introduced in 2.1.7

  Collapsible menus:  
  the selected sub-menus are now correctly displayed as selected.


- New features:

  Theme optimizer: it is now possible to see the list of Templet items getting
  translated (images, folder titles, folder items, breadcrumns, etc.) and deselect 
  those that need not be translated.

  Breadcrumbs: added an option to display a contextual icon at the start of the 
  navigation trail.


- CPS3: 
  removed folders with titles beginning with a '.' from path lists.


- i18n: the list of choices for the appearance of the Action Bar 
  (text only, icons, text and icons) is now internationalized.


==========================================================================
CPSSkins 2.1.7 (development version) 
Released: 2004-07-17

Changes:

- Optimizations: after some refactoring of the main page templates
  theme rendering is now approx. 4-5% faster.

  NB: additional 6% speed optimizations have been done under CPS3 by 
  fetching document proxies directly instead of calling getContentInfo(). 


- i18n: Localized images.
  The image shown in the ImageBox Templet can now be translated.
  This can be used to display localized banners, logotypes, ...

  To enable this option, select "Translate the image" in the Templet's 
  property form.
  Once the option is selected, all newly uploaded images will be saved in a
  container under different ids ('i18n_image_xx') where 'xx' is the language 
  code of the current language.

  If no localized image exists for the current language then the default
  version of the image will be displayed instead, i.e. the Templet's original
  image.

  All images are saved inside the same Templet, hence they are managed as if 
  there was only one image: if the Image Box is moved, all i18n images will be
  moved along, etc.
  

- Made the copy of Templets from one theme to another more robust:
  Style names will be modified if necessary and the copied Templet's style 
  properties will be updated accordingly.


- CMF/Plone: merged a patch sent by Olle Olson:
  * to take into account site URLs beginning with '//' 
  * to get the Collapsible Menus to work more often
  * to filtered out unpublished content depending on the user's role

  the file changed is 'skins/cpsskins_cmf/cpsskins_getNavigationInfo.py'


- fixed a bug in the theme rebuild method.


==========================================================================
CPSSkins 2.1.6 (development version) 
Released: 2004-07-12

Changes:

- Optimizations: theme rendering is now approx. 5% faster. This is mainly
  due to using declarePublic(...) instead of declareProtected(View,...)
  in the methods used for Theme rendering.


- Theme management: The Theme rebuild process has been highly improved:

  * Only the nececessary updates are applied which highly reduces rebuild
    times when a Theme already is up-to-date with the current release.

  * The Theme's sanity is now thoroughly checked. Objects that are not allowed 
    will be moved to current Theme's lost+found folder called 'LOST-AND-FOUND'.
    Broken objects originating from uninstalled products are deleted.
    (this might change if there is a way to move them to the lost+found folder)

  * Imported themes are no longer set as default.

  * Resetting permissions on the Theme's objects is now optional.
    This can be done through the ZMI by checking the 'Reset all permissions'
    button.

    Rebuild times are now:
    ~ 0.5s on themes that are up-to-date with the current release.
    ~ 1.5s on themes that are up-to-date - when resetting permissions.
    ~ 10s on very old themes (these were created about a year ago)

    

- Theme creation: 

  * Default styles are now automatically set on newly created Templets

  * Templets can now be drag and dropped between one Theme and another.

    This option makes it possible to design reference Themes that are not 
    necessarily functional but that can be used to create other Themes by 
    reusing the Templets (and thus the Styles) inside other Themes.

    Not only the Templets get copied but the Styles and all the
    images used in it (backgrounds, icons, ...) also get copied.

    Images are copied only once: if they are already present in the 
    destination Theme they will not be duplicated unnecessarily.

    Styles are copied even if they are already present in the destination
    theme. Identical styles resulting from being copied several times can
    be merged afterwards in the "Theme Optimization" panel.
    There is still an issue with Styles that have identical names.


- CMF/Plone:

    The '+' sign displayed next to folder tabs can now be used as a shortcut
    to add items inside the current folder.
    (this is a link to '.../folder_factories')

    Selected tabs are now displayed as selected.

  

==========================================================================
CPSSkins 2.1.5 (development version) 
Released: 2004-07-09

Changes:

- UI: added a new type of Templet called 'Portal Tab'.
  The Portal Tab Templet uses horizontal tabs to displays folder contents 
  or actions, etc. It is a simplified version of the Portal Box Templet
  which displayed tabs by being oriented horizontally.

  Graphically, the Templet relies entirely on CSS background images 
  which makes it possible to show tabs with rounded corners.

  The rendering technique is inspired from a method used on CNET.com.
  It has been tested and it works on Mozilla, IE, Konqueror and Opera.

  HTML markup:
    <div class="PortalTab...">
      <ul>
        <li class="submenuin"><a href="...">Item 1</a></li>
        <li class="submenuout"><a href="...">Item 2</a></li>
        <li class="submenuout"><a href="...">Item 3</a></li>
      </ul>
    </div>

  CSS code: 
    see skins/CPSSkins/cpsskins_portaltabstyle.dtml

  Style/layout options:
    - horizontal padding
    - vertical padding
    - horizontal margin
    - bottom border color
    - bottom border color [selected tab]

  5 images can be used:
    - left-side image
    - right-side image 
    - left-side image [selected tab]
    - right-side image [selected tab]
    - background image behind the tabs

  The default themes included in this release have been updated.
  They include a style of tabs inspired from MacOSX.

  To install the Portal Tab Templet on an existing site it is necessary to  
  run the 'cpsskinsupdate' script first.


- Theme creation: added a Templet toolbar at the top of the control panel that
  simplifies the creation of new Templets by using the "drag-and-drop" technique.
  To add a new Templet, simply move it from the toolbox to the canvas.


- Portal Box Templets can now be aligned horizontally (left, center, right) by using
  the contextual menu. This used to be taken care of by the Portal Box Shape style.
  As a consequence of upgrading to 2.1.5 some Templets may need to be re-aligned.
  Also a Theme rebuild is recommended to update all the settings.


- i18n: updated the Italian translation to CPSSkins 2.1.4 (Thanks to Fabio Nosari)


- l10n: the display style of the box title is now called 'Box width' 
  and 'Title width' instead of 'block' and 'inline'.


- CPS3: the box management panel works better with IE.


- Bugs: added a missing 'render_action' for Collapsible Menus which caused them to 
  be shown as "broken templets"

  Updated some scripts for them to work without CMFActionIcons (since the product is optional)
  


==========================================================================
CPSSkins 2.1.4 (development version) 
Released: 2004-07-07

Changes:

- Theme management: added support for "external themes".
  External themes are themes that are located on an external server 
  (WWW or FTP server). They can be installed directly over the Internet 
  without first being saved on the filesystem.

  An external theme has a theme ID (Zope Id) and a theme URL which is the
  address of a CPSSkins theme in .zexp format located on the remote server.
  The current implementation supports URLs beginning with http://___, 
  https://___  and ftp://___ .

  The update process can be automated (e.g. with UNIX cron)


==========================================================================
CPSSkins 2.1.3 (development version) 
Released: 2004-07-04

Changes:

- Optimizations: theme rendering is now approx. 8% faster.
  This is due to a couple of optimizations:

  The Text Box has been optimized (converted ZPT to python script)
  The text format can now be set to plain text, to HTML, or to Structured Text
  which means that there is at most only one conversion.
  The default text format is HTML (i.e. no conversion).

  The Image Box has been optimized (converted ZPT to python script)

  The Action Box that displays action icons has been optimized
  (the information about action icons is only fetched once)

  14 python scripts have been moved from skin directories to class methods 
  for faster page loading in theme edition mode.

  The main rendering templates (cpsskins_main_template_...) have been optimized.


- i18n: some of the Templet items are now optionally translated:

  Added an option to the Text Box Templet to enable the translation of the text.

  Added an option to the Portal Box Templet showing folder contents
  to enable the translaton of folder items ('Translate folder items')

  Added an option to the Portal Box Templet to enable the translation of 
  the box title. ('Translate the box title')

  Added an option to the Breadcrumbs Templet to enable the translation of the 
  navigation trail ('Translate the breadcrumbs')


==========================================================================
CPSSkins 2.1.2 (development version) 
Released: 2004-06-28

Changes:

- Optimizations: theme rendering is now approx. 5-6% faster 
  (this is measured on an average of 18 reference themes)

  The rendering of the dynamic stylesheets has been optimized by 2-3%.


- CPS3: added drag-and-drop functionality and contextual menus to CPS3's
  box management panel. New boxes can easily be added onto the box canvas 
  and moved between the different box slots.

  Updated CPSSkins/skins/cpsskins_cps3/main_template.pt to ensure compatibility 
  with CPSDefault from cvs 2004-06-25.


- Dependencies: removed the dependency on OrderFolderSupportPatch.
  CPSSkins can now be installed on CMF/Plone without OrderFolderSupportPatch.


- Portal Boxes: added a new layout for language selection that displays 
  language names instead of country flags.

  Bug fix: corrected a bug in Plone2's Language Box.


- Tests: made the functional tests more robust


- Misc: converted some menu images from PNG to GIF for a nicer rendering 
  under IE.

  Some refactoring / code cleaning


==========================================================================
CPSSkins 2.1.1 (development version) 
Released: 2004-06-24

Changes:

- User interface:  Upgraded the PDLib javascript UI library to version 0.3.  
  PDLib is used for contextual menus and the drag and drop functionality.
  This version has a much better support for IE. 
  The code is taken from Shane Hathaway's 'CompositePage-0.2' product  
  (see COPYRIGHT.TXT).

  Contextual menus can now be displayed with a right mouse click.  
  The Templet's title and icon is also shown in the contextual menu.
  To edit a Templet, right-click on it and select the 'Edit' menu item.

  The links used inside a Templet are now inactive which means that 
  clicking on a Templet will always trigger the contextual menu.


- Added a new box layout called 'Drawer box' which displays portal boxes 
  with arrows that can be opened and closed as a drawer.
  Individual users can open and close the boxes that use this layout, 
  cookies must be enabled. Box states (open/closed) are not persistent.

  The layout also exists as 'Drawer box without title'.


- i18n:
  Updated the Italian translation.   
  Thanks to Fabio Nosari and PiCo.

  Updated the Spanish translation.   
  Thanks to \301lvaro Tejero Cantero


- Misc:
  All permissions used by CPSSkins are now declared in CPSSkinsPermissions.py


- Bug fix:
  fixed a bug in the Calendar Templet that occured on events spanning several days


=========================================================================
CPSSkins 2.1.0 (development version) 
Released: 2004-06-20

Changes:

- Optimizations: the 'render' action for Templets and Styles objects
  can now be called directly without using CMF by explicitly specifying
  the render method's name in a variable called 'render_action'.
  This improves rendering times by approx. 3%.

  Example:

  ==========
  TextBox.py
  ==========
  class TextBox(BaseTemplet):
      """Text Box Templet."""

      meta_type = 'Text Box Templet'
      portal_type = 'Text Box Templet'

      render_action = 'cpsskins_textbox'
      ...

  Besides, 'meth = getattr(self, render_action)' is used instead of: 
  'meth = self.restrictedTraverse(render_action)'


- i18n: select options shown in the theme edition mode can now be translated.
  A boolean property called 'i18n' has been added which if it is true
  will cause option names to be translated as '_option_...'.

  Example:

  ==============
  BaseTemplet.py
  ==============
  _properties = (
         ...
         {'id': 'visibility',  
         'type': 'selection',  
         'mode': 'w', 
         'label': 'Visibility criteria', 
         'select_variable': 'cpsskins_visibilityList', 
         'category': 'visibility',
         'default': 'always',
         'i18n': 1,
        },
         ...
   )

  ==========================
  cpsskins_visibilityList.py
  ==========================
  list = ['always', 'everywhere_except_in', 'only_in', \
          'starting_from', 'up_till', 'if_authenticated', 'if_anonymous', \
          'if_secure_connection' ]

  return list

  ==============
  cpsskins-en.po
  ==============
  msgid "_option_always_" 
  msgstr "Always"
 
  msgid "_option_everywhere_except_in_" 
  msgstr "Everywhere except in ..."


- Added an option called 'Folder title' to specify the source of Portal Box 
  titles.
  This option works only with boxes that display folder contents.

- The contextual menu now only shows a list of styles that are applicable
  to a given Templet. For instance the "Calendar Style" option will be 
  only shown when right-clicking on a Calendar Templet.

- Added an option called 'Hide current language' in the Language Templet
  which when selected will cause the country flag corresponding to 
  the current language to be hidden

- Added 15 functional tests that are run as Member, Manager, Theme Manager.
  Not all tests pass under CMF/Plone

- Unauthorized users that attempt to view theme management pages are now 
  redirected to the login form.

- Some cleaning / refactoring


