[Libreoffice-commits] .: Branch 'newbranch' - liboextensioncenter/am.liboextensioncenter

Andreas Mantke andreasma at kemper.freedesktop.org
Fri Apr 15 09:13:31 PDT 2011


 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/.directory                                   |    4 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/by-category.pt                               |  108 +++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/findParentProjectURL.py                      |   11 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/getUpcomingReleases.py                       |   37 +
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter.css.dtml                 |   66 ++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt              |  314 ++++++++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt.metadata     |    2 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt                  |  169 +++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt.metadata         |    2 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_info.pt                      |   56 +
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_resources.pt                 |  133 ++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_roadmap.pt                   |   81 ++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_releases.pt                          |   89 ++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_categories_view.pt                       |   69 ++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_file_view.pt                             |   70 ++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_listing.pt                  |  146 ++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_view.pt                     |  113 +++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_project_view.pt                          |  269 ++++++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_listing.pt                       |   60 +
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_view.pt                          |  244 +++++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_releasefolder_view.pt                    |  163 +++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_roadmap.pt                               |  303 +++++++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_view_ploneorg.pt                         |  270 ++++++++
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_view_ploneorg.pt.metadata                |    2 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/documentation_icon.gif                |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/documentation_icon.gif.metadata       |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/download_icon.gif                     |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/download_icon.gif.metadata            |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/hour_icon.gif                         |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/hour_icon.gif.metadata                |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/improvementproposal_icon.gif          |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/improvementproposal_icon.gif.metadata |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/issuetracker_icon.gif                 |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/issuetracker_icon.gif.metadata        |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_all_platforms.gif            |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_all_platforms.gif.metadata   |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_beos.gif                     |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_beos.gif.metadata            |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_bsd.gif                      |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_bsd.gif.metadata             |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_linux.gif                    |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_linux.gif.metadata           |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_linux_bsd_unix.gif           |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_linux_bsd_unix.gif.metadata  |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_mac_os_x.gif                 |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_mac_os_x.gif.metadata        |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_os_2.gif                     |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_os_2.gif.metadata            |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_qnx.gif                      |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_qnx.gif.metadata             |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_solaris.gif                  |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_solaris.gif.metadata         |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_suse_linux.gif               |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_suse_linux.gif.metadata      |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_unix__other_.gif             |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_unix__other_.gif.metadata    |    3 
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_windows.gif                  |binary
 liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter_images/platform_windows.gif.metadata         |    3 
 58 files changed, 2832 insertions(+)

New commits:
commit d95af929776e300bf86f558ccca533189888d9b1
Author: Andreas Mantke <maand at gmx.de>
Date:   Fri Apr 15 18:13:12 2011 +0200

    new naming of directories and files with liboextensioncenter

diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/.directory b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/.directory
new file mode 100644
index 0000000..6d1d12c
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/.directory
@@ -0,0 +1,4 @@
+[Dolphin]
+AdditionalInfo=3
+Timestamp=2011,4,15,18,4,17
+ViewMode=1
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/by-category.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/by-category.pt
new file mode 100644
index 0000000..29cc7b2
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/by-category.pt
@@ -0,0 +1,108 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:top fill-slot="top_slot">
+        <tal:border define="dummy python:request.set('disable_border', 1)"/>
+    </metal:top>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+    <metal:override fill-slot="column_two_slot" />
+</head>
+
+<body>
+
+  <div metal:fill-slot="main" 
+       id="content"
+       tal:define="view context/@@category_view;
+                   global getInfoFor nocall:here/portal_workflow/getInfoFor;
+                   category python:request.traverse_subpath and request.traverse_subpath[0] or nothing;">
+
+        <tal:logic condition="not:category">
+            <tal:redirect define="dummy python:request.RESPONSE.redirect(here.absolute_url())"/>
+        </tal:logic>
+
+        <tal:projects condition="category"
+                      define="packages python: view.by_category(category)">
+        
+            <h1 class="documentFirstHeading" i18n:translate="label_projects_by_category">
+              Projects in category <span i18n:name="label_projects_category_name" tal:replace="python:view.category_name(category)" />
+            </h1>
+
+            <a href=""
+              class="link-parent"
+              i18n:translate="label_up_to_project_overview"
+              tal:define="parent_url here/absolute_url"
+              tal:condition="parent_url"
+              tal:attributes="href parent_url">
+              &laquo; Back to project overview
+            </a>
+
+            <tal:nopackages condition="not:nocall:packages">
+                <div class="discreet" i18n:translate="no_packages_found">
+                    No projects found in this category.
+                </div>
+            </tal:nopackages>
+
+            <tal:packages condition="nocall:packages">
+                <p class="documentDescription" 
+                    tal:content="python:view.category_description(category)">
+                Description
+                </p>
+
+                <p class="discreet" i18n:translate="available_projects_category">
+                    The available projects in this category, alphabetized.
+                </p>
+
+
+                <div class="tileItem visualIEFloatFix"
+                     tal:repeat="package packages">
+<!--
+                <div class="visualIEFloatFix" style="margin-top: 1em;" 
+                     tal:condition="package/screenshot_thumb | nothing">
+                    <div style="float:right; text-align: center; margin: 1em 0 1em 1em;">
+                        <a class="discreet"
+                           tal:attributes="href string:${package/absolute_url}/screenshot/image_view_fullscreen">
+                            <img tal:replace="structure package/screenshot_thumb" />
+                            <br />
+                            <img tal:replace="structure here/search_icon.gif" />
+                            <span i18n:translate="label_click_to_enlarge">
+                                Click to enlarge
+                            </span>
+                        </a>
+                    </div>
+                </div>
+-->
+                    <h2 class="tileHeadline">
+                      <a tal:attributes="href package/getURL" tal:content="package/Title">Title</a>
+                    </h2>
+                    <p class="tileBody"
+                       tal:content="package/Description">
+                    Description
+                    </p>
+
+                    <p class="tileFooter">
+                        <a href=""
+                           tal:attributes="href package/getURL"
+                           i18n:translate="read_more">
+                        Read More&hellip;
+                        </a>
+                    </p>
+                </div>
+            </tal:packages>
+
+        </tal:projects>
+
+    </div>
+    
+</body>
+
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/findParentProjectURL.py b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/findParentProjectURL.py
new file mode 100755
index 0000000..ad41f0f
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/findParentProjectURL.py
@@ -0,0 +1,11 @@
+## Script (Python) "findParentProjectURL"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=releaseUrl
+##title=Calculate the parent project URL for the given release URL
+
+parts = releaseUrl.split('/')
+return '/'.join(parts[:-2])
\ No newline at end of file
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/getUpcomingReleases.py b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/getUpcomingReleases.py
new file mode 100755
index 0000000..b7df530
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/getUpcomingReleases.py
@@ -0,0 +1,37 @@
+## Script (Python) "getUpcomingReleases"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=releasesFolder='../releases', states=['pre-release', 'alpha', 'beta', 'release-candidate']
+##title=Get upcoming software releases
+
+from Products.CMFCore.utils import getToolByName
+
+wftool = getToolByName(context, 'portal_workflow')
+folder = context.restrictedTraverse(releasesFolder)
+
+typesFilter = {'portal_type' : ['PSCRelease']}
+
+# Return a list of items sorted by expected release dates in reverse order;
+# items with no expected date set are returned at the end, in folder-order.
+
+datedReleases = []
+undatedReleases = []
+
+for r in folder.folderlistingFolderContents(contentFilter = typesFilter):
+    if wftool.getInfoFor(r, 'review_state') in states:
+        if r.getExpectedReleaseDate():
+            datedReleases.append(r)
+        else:
+            undatedReleases.append(r)
+            
+datedReleases.sort(lambda x, y: \
+                    cmp(x.getExpectedReleaseDate(), y.getExpectedReleaseDate()))
+
+releases = datedReleases + undatedReleases
+
+return releases
+        
+        
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter.css.dtml b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter.css.dtml
new file mode 100644
index 0000000..77a8272
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter.css.dtml
@@ -0,0 +1,66 @@
+/* 
+** liboextensioncenter style sheet for CSS2-capable browsers.
+**
+** Copyright Alexander Limi - http://www.plonesolutions.com
+**
+** Feel free to use whole or parts of this for your own designs, but give credit
+** where credit is due.
+**
+*/
+
+/* <dtml-with base_properties> */
+
+.portletHalfWidth {
+    width: 45%; 
+    float: left; 
+    margin: 0 1em 1em 0 !important;
+}
+
+.portletThirdWidth {
+    width: 30%; 
+    float: left; 
+    margin: 0 1em 1em 0 !important;
+}
+
+/* This portlet link selector can be removed once Plone 2.1.3 and later is more common */
+.portlet a {
+    display: inline;
+}
+
+
+.state-being-discussed {
+    color: Black;
+}
+
+.state-in-progress {
+    color: &dtml-notifyBorderColor;;
+}
+
+.state-completed {
+    color: &dtml-linkColor;;
+}
+
+.state-rejected {
+    color: &dtml-discreetColor;;
+}
+
+.state-deferred {
+    color: Red;
+}
+
+.state-ready-for-merge {
+    color: #74AE0B;
+}
+
+.poweredBy { 
+}
+
+.note {
+    border-color: #CCCCCC;
+    border-style: solid;
+    border-width: thin 0 0 thin;
+    margin: 2em;
+    padding: 0 0.5em 0 1em;
+}
+
+/* </dtml-with> */
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt
new file mode 100644
index 0000000..ab02ecf
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt
@@ -0,0 +1,314 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="plonehelpcenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+        <style type="text/css" media="all" 
+            tal:content="string:@import url($portal_url/liboextensioncenter.css);">
+        </style>
+        <style type="text/css">
+            .screenshot {
+                float: right;
+            }
+            .project {
+                margin-top: 1em;
+                padding-top: 1em;
+                border-top: 1px solid #8CACBB;
+            }
+        </style>
+    </metal:css>
+    <metal:block fill-slot="top_slot">
+        <tal:noborder condition="python:not user.has_permission('Modify portal content', context)">
+            <tal:noborderset tal:define="dummy python:request.set('disable_border', 1)" />
+        </tal:noborder>
+    </metal:block>
+</head>
+
+<body>
+    <div metal:fill-slot="main"
+        tal:define="view context/@@category_view;
+            global getInfoFor nocall:here/portal_workflow/getInfoFor;
+            catalog nocall:here/portal_catalog;
+            herePath python:'/'.join(here.getPhysicalPath());
+            currentCategory request/getCategories | string:;
+            currentVersion request/getCompatibility | string:any;
+            currentVersion python:test(currentVersion=='current',['Plone 3.0','Plone 2.5'],currentVersion);
+            currentVersion python:test(currentVersion=='any','',currentVersion);
+            getCategoryName nocall:view/category_name;
+            normalizeString nocall:context/@@plone/normalizeString;
+            toLocalizedTime nocall:context/@@plone/toLocalizedTime;
+            cropText nocall:context/@@plone/cropText;">
+                     
+        <h1 tal:content="here/title_or_id" class="documentFirstHeading">
+            Title or id
+        </h1>
+
+        <div class="feedButton" >
+            <a href="" tal:attributes="href string:${context/absolute_url}/search_rss?portal_type=PSCRelease"><img 
+                i18n:attributes="title title_rss_feed; alt label_rss_feed;"
+                    tal:attributes="src string:$portal_url/rss.gif" src="rss.gif"
+                        alt="RSS Feed" title="RSS feed of the latest releases" /></a>
+        </div>
+
+        <p class="discreet" tal:define="projectsCount python:len(catalog(portal_type = 'PSCProject', path = herePath));
+            releasesCount python:len(catalog(portal_type = 'PSCRelease', path = herePath))"
+            i18n:translate="help_download_currently_listing">
+                Currently listing <span i18n:name="results_projects_count" tal:replace="projectsCount" /> projects with <span i18n:name="results_releases_count" tal:replace="releasesCount" /> releases.
+        </p>
+
+        <p class="documentDescription" tal:content="here/Description">
+            Description
+        </p>
+        
+        <div class="visualClear"><!-- --></div>
+    
+        <tal:featured_project_wrapper tal:condition="python: here.getFeaturedProject()">
+            <dl class="portlet" style="width: 23em; float: left">
+                <dt class="portletHeader" i18n:translate="label_psc_ploneorg_featured_project">
+                    Get <tal:featured_project tal:replace="python: here.getFeaturedProject().Title()"
+                    i18n:name="label_psc_ploneorg_get_featured_project">
+                        Featured Project </tal:featured_project> 
+                    for your platform
+                </dt>
+                <dd class="portletItem" style="text-align: center" 
+                    tal:define="project_url python: here.getFeaturedProject().absolute_url()">
+                    <a tal:attributes="href project_url"><img 
+                        height="40" width="40" alt="Windows" src="platform_windows.gif" /><img 
+                        height="40" width="40" alt="Mac" src="platform_mac_os_x.gif" /><img 
+                        height="40" width="40" alt="Linux" src="platform_linux.gif" /></a>
+                    <h3>
+                        <a tal:attributes="href project_url" title="Download projects"
+                           style="border-bottom: 1px solid #8CACBB"
+                           i18n:attributes="title title_psc_ploneorg_get_download">
+                              <span i18n:translate="label_psc_ploneorg_get_download">Download</span>&nbsp;
+                              <tal:featured_project tal:replace="python: here.getFeaturedProject().Title()">Featured Project</tal:featured_project>
+                        </a>
+                    </h3>
+                    <span class="discreet"
+                          i18n:translate="label_psc_ploneorg_latest_release">Latest release: 
+                        <tal:latest_release tal:replace="python: here.getFeaturedProjectRelease().getId()"
+                        i18n:name="title_psc_ploneorg_latest_release"> 
+                            Latest Release
+                        </tal:latest_release>
+                    </span>
+                </dd>
+            </dl>
+        </tal:featured_project_wrapper>
+
+        <dl class="portlet" style="float:right; width: 23em;">
+            <dt class="portletHeader"
+                i18n:translate="heading_search_addon_packages">Search for add-on packages</dt>
+
+            <dd class="portletItem">
+                <form style="text-align: center;"
+                      name="searchform" id="searchform"
+                      action="/search" tal:attributes="action string:${portal_url}/search">
+               
+                        <label for="searchGadget"
+                               class="hiddenStructure">
+                            Search add-ons
+                        </label>
+                        <input type="hidden" name="path" tal:attributes="value python:'/'.join(here.getPhysicalPath())" />
+                        <input type="hidden" name="portal_type" value="PSCProject" />
+                        <input name="SearchableText" type="text"
+                               size="12"
+                               style="font-size: 150%"
+                               title="Search add-ons"
+                               accesskey="accesskeys-search"
+                               i18n:attributes="title label_search_addon"
+                               tabindex="0" />
+        
+                        <input class="searchButton" name="Search"
+                               style="font-size: 150%; background-position: 3px 5px; padding-left: 25px; padding-right: 10px"
+                               type="submit" value="Search" i18n:attributes="value label_search_package_releases"
+                               accesskey="accesskeys-search" />
+                </form>
+            </dd>
+        </dl>
+
+        <dl class="portlet" style="float:right; clear: right; width: 23em">
+
+            <dt class="portletHeader"
+                i18n:translate="heading_want_addon_package">Want to list your add-on package?</dt>
+            <dd class="portletItem" style="text-align: center">
+                <form action="createObject" 
+                      tal:condition="python: user.has_permission('liboextensioncenter: Add Project', context)">
+                    <input name="type_name"
+                           type="hidden"
+                           value="PSCProject"
+                           />
+                    <input class="standalone"
+                           type="submit"
+                           style="font-size: 110%; padding: 3px 5px 3px 26px; background-position: 10px 5px"
+                           value="Add new project"
+                           i18n:attributes="value label_add_new_project"
+                           />
+                </form>
+
+                <form tal:define="pss modules/Products/PythonScripts/standard;
+                                  isAnon context/@@plone_portal_state/anonymous;"
+                      tal:condition="python: not user.has_permission('Add portal content', context) and isAnon"
+                      tal:attributes="action python:'%s/login_form?came_from=%s' %
+                                                    (here.portal_url(),
+                                                    pss.url_quote(request['URL']))">
+
+                    <input class="standalone"
+                           type="submit"
+                           style="font-size: 110%; padding: 3px 5px 3px 26px; background-position: 10px 5px"
+                           value="Log in to add your project"
+                           i18n:attributes="value label_login_add_project"
+                           />
+                </form>
+            </dd>
+        </dl>
+
+        <!-- <select style="float: left;"
+                onchange="window.location.href=this.options[this.selectedIndex].value">
+            <option value="">Go directly to project&hellip;</option>
+            <option  tal:repeat="project here/getActiveProjects" 
+                     tal:content="python:project.Title[:30]"
+                     tal:attributes="value project/getURL">
+            </option>
+        </select> -->
+
+        
+          
+        <div class="visualClear"><!----></div>
+
+        <h2 style="margin-top:1em" i18n:translate="heading_addon_package_releases">
+          Add-on Package Releases
+        </h2>
+
+        <form id="product_select" class="even" style="padding: 1em" action="#" tal:attributes="action string:${here/absolute_url}">
+            <label i18n:translate="label_show">Show</label>
+            <select name="getCategories">
+                <option value="" i18n:translate="label_all_categories">All categories</option>
+                <tal:block tal:repeat="cat here/availableCategories">
+                    <option tal:define="csplit python:[s.strip() for s in cat.split('|')];
+                                        cid python:csplit[0]"
+                            tal:content="python:csplit[1]"
+                            tal:attributes="value cid;
+                                            selected python:test(cid==currentCategory,'selected',nothing)" />
+                </tal:block>
+            </select>
+            <label i18n:translate="label_for">for</label>
+            <select name="getCompatibility">
+                <tal:block tal:repeat="version here/getAvailableVersions">
+                    <option tal:content="version"
+                            tal:attributes="value version;
+                                            selected python:test(currentVersion==version,'selected',nothing)">
+                        Plone 3.0
+                    </option>
+                </tal:block>
+                <option value="any" tal:attributes="selected python:test(currentVersion=='','selected',nothing)"
+                        i18n:translate="label_any_version">
+                    Any version
+                </option>
+                <tal:block condition="nothing" tal:repeat="version python:catalog.uniqueValuesFor('getCompatibility')">
+                    <option tal:content="version"
+                            tal:attributes="value version;
+                                            selected python:test(currentVersion==version,'selected',nothing)">
+                        Plone 3.0
+                    </option>
+                </tal:block>
+            </select>
+             
+            <input class="context" type="submit" name="product_search" value="Update"
+                   i18n:attributes="value label_update_form_package_releases" />
+        </form>
+
+        <div tal:define="results python:catalog(getCategories=currentCategory,
+                                                getCompatibility=currentVersion, 
+                                                portal_type='PSCRelease',
+                                                sort_on='effective',
+                                                sort_order='reverse');
+                         Batch python:modules['Products.CMFPlone'].Batch;
+                         b_size python:20;b_start python:0;b_start request/b_start | b_start;
+                         desc_length site_properties/search_results_description_length;
+                         desc_ellipsis site_properties/ellipsis;">
+        
+            <p tal:condition="not: results">
+                <strong i18n:translate="description_no_results_found">No results were found.</strong>
+            </p>
+        
+            <p class="discreet" i18n:translate="help_releases_matching_criteria">
+                <span i18n:name="results_releases_matching_criteria" tal:replace="python:len(results)">234</span> releases matching your criteria, sorted with latest releases first.
+            </p>
+        
+            <div tal:condition="results"
+                  tal:define="batch python:Batch(results, b_size, int(b_start), orphan=1);">
+        
+                <div class="project" tal:repeat="result batch">
+                <tal:entry define="obj result/getObject;
+                                   project python:obj.aq_parent.aq_parent;
+                                   project python:test(project.portal_type=='PSCProject',project,obj);
+                                   url result/getURL;
+                                   projectURL project/absolute_url;
+                                   result_type result/portal_type;">
+
+                    <div class="screenshot" tal:condition="project/logo|nothing">
+                        <a href="#" tal:attributes="href projectURL"><img tal:replace="structure project/logo" /></a>
+                    </div>
+                    
+                    <div class="project_details">
+                        <h3 tal:define="item_wf_state result/review_state;
+                                        item_wf_state_class python:'state-' + normalizeString(item_wf_state);"
+                            tal:attributes="class item_wf_state_class">
+
+                            <a href="#" style="border-bottom: 1px solid #8CACBB" tal:attributes="href projectURL;" 
+                                tal:content="result/pretty_title_or_id">Software Project</a>
+
+                            <span class="discreet" tal:content="python:toLocalizedTime(result.ModificationDate, long_format=0)">
+                                Modification Date
+                            </span>
+
+                        </h3>
+                        
+                        <p class="discreet"
+                           tal:condition="not:currentCategory">
+                            in <span tal:replace="python:', '.join([getCategoryName(id) for id in result.getCategories])" />
+                        </p>
+                        
+                        <div class="description">
+                            <p tal:content="python:cropText(project.Description(), desc_length, desc_ellipsis)">
+                                Project Description
+                            </p>
+                            <p>
+                                <strong i18n:translate="label_new_this_release">New in this release:</strong> <br />
+                                <span tal:content="python:cropText(result.Description, desc_length, desc_ellipsis)">
+                                    Release Description
+                                </span>
+                            </p>                        
+                        </div>
+                    </div>
+                </tal:entry>
+                </div>
+                 
+                <!-- Navigation -->
+                <div metal:use-macro="here/batch_macros/macros/navigation" />
+        
+            </div>
+        </div>
+
+
+        <div class="visualClear"><!----></div>
+        
+        <div class="poweredBy" i18n:translate="label_powered_by_ploneorg">
+            Powered by <img src="product_icon.gif" alt="liboextensioncenter's Home Page"
+                        i18n:attributes="alt label_psc_homepage">
+            <a class="link-plain" 
+               href="http://plone.org/products/liboextensioncenter"
+               title="liboextensioncenterr's Home Page"
+               i18n:attributes="title title_psc_homepage">liboextensioncenter</a>
+        </div>
+
+    </div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt.metadata b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt.metadata
new file mode 100644
index 0000000..3873470
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_ploneorg.pt.metadata
@@ -0,0 +1,2 @@
+[default]
+title= View by release
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt
new file mode 100644
index 0000000..5b5ea5e
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt
@@ -0,0 +1,169 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="context/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+        <style type="text/css" media="all"
+               tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+  <div metal:fill-slot="main"
+       tal:define="view context/@@softwarecenter_view">
+
+    <h1 tal:content="context/title_or_id" class="documentFirstHeading">
+      Title or id
+    </h1>
+
+    <div class="feedButton" >
+       <a href="" tal:attributes="href view/rss_url">
+              <img i18n:attributes="title title_rss_feed; alt label_rss_feed;"
+                   tal:attributes="src string:$portal_url/rss.gif"
+                   src="rss.gif"
+                   alt="RSS Feed"
+                   title="RSS feed of the latest releases" />
+         </a>
+    </div>
+    
+    <p class="documentDescription"
+       tal:content="context/Description">
+      Description.
+    </p>
+
+    <form>
+      <select style="float: right; clear: right"
+              onchange="window.location.href=this.options[this.selectedIndex].value">
+        <option value="" i18n:translate="label_go_directly_project">Go directly to project&hellip;</option>
+        <option  tal:repeat="project view/active_projects" 
+                 tal:content="python:project.Title[:30]"
+                 tal:attributes="value project/getURL">
+        </option>
+      </select>
+    </form>
+
+    <form action="createObject"
+          tal:condition="view/can_add_project">
+        <input name="type_name"
+               type="hidden"
+               value="PSCProject"
+               />
+        <input class="standalone"
+               type="submit"
+               value="Add New Software Project"
+               i18n:attributes="value label_add_new_software_project"
+               />
+    </form>
+
+    <form action="createObject"
+          tal:condition="context/@@plone_portal_state/anonymous">
+        
+        <input name="type_name"
+               type="hidden"
+               value="PSCProject"
+               />
+        <input class="standalone"
+               type="submit"
+               value="Log in to add Software Project"
+               i18n:attributes="value"
+               />
+    </form>
+    
+    <p class="discreet" 
+       style="text-align: right; clear: both;"
+       i18n:translate="label_currently_listing_projects_releases">
+       Currently listing <span i18n:name="label_project_count" tal:replace="view/project_count" /> projects 
+       with <span i18n:name="label_release_count" tal:replace="view/release_count" /> releases.
+    </p>
+    
+      
+    <p class="discreet" i18n:translate="help_latest_releases_each_category">
+    The latest releases in each category. To see all projects in a specific 
+    category, click "Show all".
+    </p>
+
+    <div tal:repeat="category view/categories">
+        <dl class="portlet portletThirdWidth">
+            <dt class="portletHeader">
+               <tal:syndicate condition="context/portal_syndication/isSiteSyndicationAllowed">
+                    <a class="feedButton" href="" tal:attributes="href category/rss_url">
+                       <img i18n:attributes="title title_rss_feed; alt label_rss_feed;"
+                            tal:attributes="src string:$portal_url/rss.gif"
+                            src="rss.gif"
+                            alt="RSS"
+                            title="RSS feed for the latest releases in this category" />
+                    </a>
+                 </tal:syndicate>
+                 <a href=""
+                    tal:content="category/name"
+                    tal:attributes="href string:${context/absolute_url}/by-category/${category/id}"
+                    i18n:translate="">
+                     Category heading
+                 </a>
+            </dt>
+            <tal:releases tal:define="releases category/releases"
+                          tal:condition="nocall:releases">
+                 
+                <tal:list repeat="release releases">
+                
+                <dd class="portletItem" 
+                     tal:define="oddrow repeat/release/odd"
+                     tal:attributes="class python:test(oddrow, 'portletItem even', 'portletItem odd')">
+                    <a href=""
+                       tal:attributes="href release/parent_url;
+                                       title release/description;
+                                       class string:state-${release/review_state}">
+                        <img tal:replace="structure context/product_icon.gif" />
+                        <span tal:replace="release/title">Project</span>
+                        <span class="portletItemDetails"
+                              tal:content="python:context.toLocalizedTime(release['date'])">May 5</span>
+                        
+                    </a>
+                </dd>
+                </tal:list>
+                
+                <tal:nolist condition="not:nocall:releases">
+                    <dd class="portletItem odd">
+                        <span class="discreet" i18n:translate="no_releases_found">
+                            No releases made in this category yet
+                        </span>
+                    </dd>
+                </tal:nolist>
+
+                <dd class="portletFooter">
+                    <a href="" title="Show all the projects in this category"
+                       tal:attributes="href string:${context/absolute_url}/by-category/${category/id}"
+	               i18n:attributes="title title_psc_show_all_projects">
+                        <span i18n:translate="label_psc_show_all_projects">Show all </span> 
+                        <span tal:content="category/num_projects" /> 
+                        <span i18n:translate="label_psc_show_all_projects_category"> projects in this category&#8230;</span>
+                    </a>
+                </dd>
+            </tal:releases>
+        </dl>
+    
+        <div class="visualClear" tal:condition="python: repeat['category'].number() % 3 == 0"><!----></div>
+    </div>
+    
+    <div class="visualClear"><!----></div>
+    
+    <div class="poweredBy">
+      <span i18n:translate="label_powered_by">Powered by </span>
+      <a class="link-plain" href="http://libreoffice.org"
+         title="The homepage of LibreOffice"
+         i18n:attributes="title title_psc_homepage">
+            <span i18n:translate="label_powered_by_psc">the LibreOffice community</span>
+      </a>
+    </div>
+
+  </div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt.metadata b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt.metadata
new file mode 100644
index 0000000..a7f5165
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/liboextensioncenter_view.pt.metadata
@@ -0,0 +1,2 @@
+[default]
+title= View by topic
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_info.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_info.pt
new file mode 100644
index 0000000..48bf57c
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_info.pt
@@ -0,0 +1,56 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<body>
+
+<div metal:define-macro="portlet"
+     tal:define="project_view context/getView">
+
+    <dl class="portlet">
+        <dt class="portletHeader hiddenStructure">Info</dt>
+        <dd class="portletItem" style="text-align: center"
+            tal:condition="here/screenshot_thumb | nothing">
+            <a class="discreet"
+               tal:attributes="href string:${here/absolute_url}/screenshot/image_view_fullscreen"
+               ><img tal:replace="structure here/screenshot_thumb" /></a>
+        </dd>
+
+        <dd class="portletItem even" style="text-align: center">
+            <strong i18n:translate="label_portlet_project_info_category">Category:</strong> <span tal:replace="project_view/display_categories" />
+
+            <span tal:replace="structure context/@@user_rating_view|nothing" />
+            <span tal:replace="structure context/@@user_rating_set|nothing" />
+        </dd>
+
+
+            <tal:disabled replace="nothing">
+              <p>
+                <a href=""
+                   tal:attributes="href project_view/similar_search_url"
+                   i18n:translate="label_other_products_author"
+                   >Other products by this author</a>
+              </p>
+            </tal:disabled>
+
+            <tal:disabled replace="nothing">
+                This is disabled until we have a consensus about what to do with
+                recommended projects (politically, practically). If this is re-
+                enabled, it must also be re-enabled in schemata.py and
+                psc_releasefolder_view.pt.
+                
+                <div tal:condition="here/isRecommended"
+                     i18n:translate="label_portlet_project_info_recommended">
+                    This is a recommended project.
+                </div>
+            </tal:disabled>
+
+    </dl>
+
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_resources.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_resources.pt
new file mode 100644
index 0000000..5fa73f3
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_resources.pt
@@ -0,0 +1,133 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<body>
+
+<div metal:define-macro="portlet"
+     tal:define="project_view context/getView">
+
+    <dl class="portlet">
+        <dt class="portletHeader"
+            i18n:translate="label_project_resources">Project Resources</dt>
+        <dd class="portletItem">
+
+
+            <ul>
+                <li tal:repeat="resource project_view/additional_resources">
+                    <a href=""
+                       class="link-plain"
+                       tal:attributes="href resource/absolute_url;
+                                       title resource/Description;">
+                       <span tal:replace="resource/Title">Folder resource</span></a>
+                </li>
+                <li tal:condition="project_view/has_documentation_link">
+                    <a href=""
+                       title="Documentation for this project"
+                       i18n:attributes="title title_project_resources_documentation"
+                       tal:attributes="href project_view/documentation_url;
+                                       class project_view/documentation_link_class">
+                        <span i18n:translate="label_project_resources_documentation"> Documentation</span>
+                    </a>
+                </li>
+                
+                <li tal:condition="here/getHomepage">
+                    <a href=""
+                       class="link-plain"
+                       title="Additional home page for this project"
+                       i18n:attributes="title title_resource_project_page"
+                       tal:attributes="href here/getHomepage">
+                        <span i18n:translate="label_resource_project_page"> External project page</span>
+                    </a>
+                </li>
+
+                <li tal:condition="here/getRepository">
+                    <a href=""
+                       class="link-plain"
+                       title="Version control repository location for this project"
+                       i18n:attributes="title title_resource_code_repository"
+                       tal:attributes="href here/getRepository">
+                       <span i18n:translate="label_resource_code_repository"> Code repository</span>
+                    </a>
+                </li>
+
+                <li tal:condition="here/getTracker">
+                    <a href=""
+                       class="link-plain"
+                       title="A place to submit bug reports and feature requests for this project"
+                       i18n:attributes="title title_resource_issue_tracker"
+                       tal:attributes="href here/getTracker">
+                       <span i18n:translate="label_resource_issue_tracker"> Issue tracker</span>
+                    </a>
+                </li>
+
+                <li tal:condition="here/getMailingList">
+                    <a href=""
+                       class="link-plain"
+                       title="Support options for this product"
+                       i18n:attributes="title title_resource_support"
+                       tal:attributes="href here/getMailingList">
+                       <span i18n:translate="label_resource_support"> Support</span>
+                    </a>
+                </li>
+
+                <li tal:condition="here/getContactAddress">
+                    <a href=""
+                       class="link-plain"
+                       title="Contact address for this project"
+                       i18n:attributes="title title_resource_contact_address"
+                       tal:attributes="href here/getContactAddress">
+                       <span i18n:translate="label_resource_contact_address"> Contact address</span>
+                    </a>
+                </li>
+            </ul>
+
+
+        <p style="text-align: center"
+            tal:condition="creator"
+            tal:define="creator here/Creator; author python:context.portal_membership.getMemberInfo(creator)"
+            i18n:translate="label_portlet_project_resources_owner">
+            Project owner:
+          <a href="#"
+             tal:attributes="href string:${context/portal_url}/author/${creator}"
+             tal:content="python:author and author['fullname'] or creator"
+             tal:omit-tag="not:author" i18n:name="name_portlet_project_resources_owner">
+            Bob Dobalina
+          </a>
+        </p>
+
+        <p style="text-align: center;" 
+           tal:condition="context/portal_syndication/isSiteSyndicationAllowed | nothing">
+               <a href="" title="Subscribe to updates for this project"
+                  tal:attributes="href project_view/release_rss_url | nothing"
+                  i18n:attributes="title title_portlet_project_resources_subscribe_updates">
+                  <img tal:attributes="src here/rss.gif/absolute_url"
+                       alt="Subscribe to updates for this project"
+                       i18n:attributes="title title_portlet_project_resources_subscribe_updates" />
+                  <span
+                       i18n:translate="title_portlet_project_resources_subscribe_updates"> Subscribe to updates for this project</span>
+               </a>
+        </p>
+
+
+        </dd>
+    </dl>
+
+        <div style="text-align: center; margin-bottom: 1em"
+            tal:condition="here/screenshot_preview | nothing"
+            class="thumbzoom">
+                <img tal:attributes="src here/screenshot_preview/absolute_url"
+                     width="240" alt=""
+                     title="Screenshot &mdash; click to enlarge"
+                     i18n:attributes="title label_screenshot_click_to_enlarge;"
+                     />
+        </div>
+
+
+</div>
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_roadmap.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_roadmap.pt
new file mode 100644
index 0000000..3f99096
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_project_roadmap.pt
@@ -0,0 +1,81 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<body>
+
+<!-- Experimental releases portlet -->
+
+<div metal:define-macro="portlet"
+     tal:define="project_view context/getView;
+                 upcomingReleases project_view/upcoming_releases | nothing">
+
+    <dl class="portlet"
+        tal:condition="nocall:upcomingReleases">
+
+        <dt class="portletHeader"
+            i18n:translate="label_experimental_releases">Experimental Releases</dt>
+
+        <tal:release repeat="upcoming upcomingReleases">
+        <tal:block define="upcoming_view upcoming/@@release_view">
+        <dd class="portletItem">
+            <a href="" 
+              tal:content="upcoming/Title"
+              tal:attributes="href upcoming/absolute_url">Release 1.2.2</a><br />
+    
+            <tal:releasedate condition="upcoming_view/is_released">
+                <span class="discreet"
+                      i18n:translate="portlet_project_roadmap_released_date">
+                  Released <tal:date i18n:name="name_released_date" replace="upcoming_view/release_date" /><br />
+                </span>
+            </tal:releasedate>
+    
+            <tal:norelease condition="not: upcoming_view/is_released">
+                <span class="discreet" tal:condition="upcoming_view/release_date"
+                      i18n:translate="portlet_project_roadmap_upcoming_release">
+                  Planned release: <tal:date i18n:name="name_upcoming_release" replace="upcoming_view/release_date" /><br />
+                </span>
+            </tal:norelease>
+            <span tal:content="upcoming/Description">
+                Release description
+            </span>
+        </dd>
+        </tal:block>
+        </tal:release>
+
+        <dd class="portletItem"
+            tal:define="roadmapFolder here/getRoadmapFolder"
+            tal:condition="roadmapFolder">
+           
+                 <a i18n:translate="label_show_upcoming_releases"
+                    tal:attributes="href roadmapFolder/absolute_url">
+                     Release roadmap for 
+                     <tal:projectname tal:replace="here/title_or_id"
+                                      i18n:name="project">
+                         Project
+                     </tal:projectname>&hellip;</a>
+        </dd>
+
+
+        <dd class="portletItem">
+            <ul>
+            <li i18n:translate="help_show_upcoming_alpha_releases"><strong>Alpha</strong> releases should only be used for testing and 
+            development.</li>
+            <li i18n:translate="help_show_upcoming_beta_releases"><strong>Beta releases</strong> and <strong>Release Candidates</strong> are normally 
+            released for production testing, but should not be used on 
+            mission-critical sites.</li>
+            <li i18n:translate="help_show_upcoming_test_releases">Always install on a separate test server first, and 
+                <a href="/documentation/faq/plone-backup-move">make
+                sure you have proper backups</a> before installing.</li>
+            </ul>
+        </dd>
+
+    </dl>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_releases.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_releases.pt
new file mode 100644
index 0000000..0c49231
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/portlet_releases.pt
@@ -0,0 +1,89 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<body>
+
+<!-- Release portlet -->
+
+<div metal:define-macro="portlet"
+     tal:condition="results"
+     tal:define="results python:context.portal_catalog(
+                                        portal_type='PSCRelease',
+                                        sort_on='Date',
+                                        sort_order='reverse',
+                                        sort_limit=5,
+                                        review_state=('alpha','beta','release-candidate','final',)
+                                        )[:5];
+                 psc python:context.portal_catalog(
+                                        portal_type='liboextensioncenter',
+                                        sort_on='Date',
+                                        sort_order='reverse',
+                                        sort_limit=1)[:1]">
+
+<dl class="portlet" id="portlet-releases">
+
+    <dt class="portletHeader">
+        <tal:syndicate condition="context/portal_syndication/isSiteSyndicationAllowed">
+           <a class="feedButton" href="" tal:attributes="href string:$here_url/search_rss?portal_type=PSCRelease&amp;sort_on=Date&amp;sort_order=reverse&amp;review_state=alpha&amp;review_state=beta&amp;review_state=release-candidate&amp;review_state=final">
+              <img i18n:attributes="title title_rss_feed; alt label_rss_feed;"
+                   tal:attributes="src string:$portal_url/rss.gif"
+                   src="rss.gif"
+                   alt="RSS Feed"
+                   title="RSS feed of the latest releases" />
+           </a>
+        </tal:syndicate>
+        <a href=""
+           tal:omit-tag="not: nocall:psc"
+           tal:attributes="href python:psc[0].getURL()"
+           i18n:translate="box_latest_releases">
+        Latest releases
+        </a>
+    </dt>
+
+    <tal:releases tal:repeat="obj results">
+    <dd tal:define="oddrow repeat/obj/odd"
+         tal:attributes="class python:test(oddrow, 'portletItem even', 'portletItem odd')">
+
+        <a href=""
+           tal:attributes="href python:here.findParentProjectURL(obj.getURL());
+                           title obj/Description">
+            <tal:block replace="structure here/product_icon.gif"/>
+            <span tal:replace="python:test(obj.Title, obj.Title, obj.getId)">
+                Product
+            </span>
+        </a>
+        
+        <div class="discreet"
+             tal:define="categories obj/getCategoryTitles | nothing"
+             tal:condition="categories"
+             tal:content="python: ', '.join(categories)">
+            Category
+        </div>
+
+        <div class="portletDetails"
+        tal:content="python:here.toLocalizedTime(obj.Date)">
+            July 7, 08:11
+        </div>
+    </dd>
+    </tal:releases>
+
+    <dd class="portletFooter" tal:condition="nocall:psc">
+
+        <a href=""
+           class="portletMore"
+           tal:attributes="href python:psc[0].getURL()"
+           i18n:translate="box_more_projects">
+            More Releases&hellip;
+        </a>
+
+    </dd>
+</dl>
+
+</div>
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_categories_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_categories_view.pt
new file mode 100644
index 0000000..c4bcc67
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_categories_view.pt
@@ -0,0 +1,69 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+<div metal:fill-slot="main"
+     tal:define="categories python:modules['am.liboextensioncenter.config'].CATEGORY_LIST">
+
+    <div metal:define-macro="main">
+
+        <h1 class="documentFirstHeading">
+            <img tal:replace="structure here/product_icon.gif" />
+            <span tal:replace="here/title_or_id">Title or id</span>
+        </h1>
+
+        <a href=""
+           class="link-parent"
+           i18n:translate="label_up_to_product_page"
+           tal:define="parent_url python:here.navigationParent(here, template.getId())"
+           tal:condition="parent_url"
+           tal:attributes="href parent_url">
+            &laquo; Back to project overview
+        </a>
+
+        <p class="documentDescription"
+             tal:content="here/Description">
+            description
+        </p>
+
+        <h2 i18n:translate="heading_available_categories">
+            Available categories
+        </h2>
+
+        <tal:categories repeat="category categories">
+            <h3 tal:content="category">
+                Category
+            </h3>
+            <tal:catalog define="results python:here.portal_catalog.searchResults(
+                                                     portal_type='PSCProject'
+                                                   , Categories=category
+                                                   , review_state='published')[:5]">
+                <ul tal:condition="results" tal:repeat="obj results">
+                    <li tal:content="obj/Title">
+                        Project
+                    </li>
+                </ul>
+            </tal:catalog>
+        </tal:categories>
+
+    </div>
+
+</div>
+
+</body>
+
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_file_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_file_view.pt
new file mode 100644
index 0000000..9f103e1
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_file_view.pt
@@ -0,0 +1,70 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+<div metal:fill-slot="main">
+
+    <div metal:define-macro="main"
+         tal:define="view here/@@file_view">
+    
+        <dl class="portalMessage info"
+            tal:define="is_editable context/@@plone_context_state/is_editable;"
+            tal:condition="python: is_editable">
+            <dt>Info</dt>
+            <dd>
+                <span i18n:translate="help_message_remember_is_editable">Remember to publish your release once all files have been added by </span>
+                <a href="" tal:attributes="href here/aq_parent/absolute_url">
+                <span i18n:translate="help_message_remember_back_release_page"> going back to the release page</span>
+                </a>.
+            </dd> 
+        </dl>
+
+        <h1 class="documentFirstHeading">
+            <img tal:replace="structure here/product_icon.gif" />
+            <span tal:replace="here/aq_parent/title_or_id">Title or id</span> -
+            <span tal:replace="here/title_or_id">Title or id</span>
+        </h1>
+
+        <div tal:content="structure provider:plone.belowcontenttitle" />
+
+        <p class="documentDescription"
+             tal:content="here/aq_parent/Description">
+            description
+        </p>
+
+        <p tal:define="downloadURL view/direct_url">
+            <a tal:attributes="href downloadURL"
+               tal:condition="view/file_size">
+                <img tal:replace="structure here/download_icon.gif" />
+            </a>
+            <a tal:attributes="href downloadURL"
+               tal:define="filename python:here.getFilename('downloadableFile')">
+                Download <tal:filename condition="filename"
+                                      replace="string:$filename" />
+            </a>
+            <tal:size define="fileSize view/file_size"
+                      condition="fileSize">
+                (<span tal:replace="fileSize">256KB</span>)
+            </tal:size>
+        </p>
+
+    </div>
+
+</div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_listing.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_listing.pt
new file mode 100644
index 0000000..4a37302
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_listing.pt
@@ -0,0 +1,146 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
+      lang="en-US"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="plone">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+
+<div metal:fill-slot="main"
+       tal:define="view context/@@roadmap_view;
+           state python:request.get('state', []);
+           plips python:view.improvement_proposals(review_state = state);
+           b_start python:request.get('b_start', 0);
+           Batch python:modules['Products.CMFPlone'].Batch;
+           batch python:Batch(plips, 50, int(b_start), orphan=0);
+           releaseFolderUrl python:'/'.join(here.absolute_url().split('/')[:-1]) + '/releases';
+           ">
+
+    <h1>
+      <span i18n:translate="label_improvements_listing">Improvement Proposals </span>
+      <span tal:condition="state">"</span><span tal:replace="python:(', ').join(state).capitalize()" /><span tal:condition="state">"</span>
+      <span i18n:translate="label_improvements_proposals_for"> for </span>        
+      <span tal:replace="here/aq_parent/Title" />
+    </h1>
+
+        <p class="documentDescription"
+           tal:condition="plips">
+           <span i18n:translate="help_improvements_listing">
+            If you want to see the feature proposals displayed according
+            to what release they are assigned to, go to the
+           </span>            
+        <a href="psc_roadmap" title="Roadmap page"
+           i18n:attributes="title title_improvements_listing_roadmap_page">
+           <span i18n:translate="title_improvements_listing_roadmap_page">Roadmap page</span>
+        </a>.
+        </p>
+
+
+
+    <!-- Navigation -->
+    <div metal:use-macro="here/batch_macros/macros/navigation" />
+
+        <table id="sortable"
+               class="listing"
+               summary="Improvement Proposal listing"
+               tal:condition="plips">
+
+            <thead>
+
+                <tr>
+
+                    <th style="width: 50%">&nbsp;<tal:title i18n:translate="listingheader_title"
+                    >Title</tal:title>&nbsp;</th>
+
+                    <th>&nbsp;<tal:title i18n:translate="listingheader_title"
+                    >Category</tal:title>&nbsp;</th>
+
+                    <th>&nbsp;<tal:modified i18n:translate="listingheader_modified"
+                    >Modified</tal:modified>&nbsp;</th>
+
+                    <th>&nbsp;<tal:state i18n:translate="listingheader_status"
+                    >Status</tal:state>&nbsp;</th>
+
+                    <th>&nbsp;<tal:version i18n:translate="listingheader_target_release"
+                    >Target Release</tal:version>&nbsp;</th>
+                </tr>
+            </thead>
+
+            <tbody>
+            <metal:block tal:repeat="item batch">
+                <tr tal:define="oddrow repeat/item/odd;
+                                review_state item/review_state;"
+                    tal:attributes="class python:test(oddrow, 'even', 'odd')">
+
+                    <td>
+                        <a href="#" tal:attributes="href item/getURL; title item/Description;">
+                            <img
+                                 alt="" tal:attributes="src string:${portal_url}/improvementproposal_icon.gif"
+                            />&nbsp;<span tal:replace="item/Title">Title</span>
+                        </a>
+                    </td>
+
+                    <td tal:content="python: ', '.join(item.getProposalTypes)">
+                    Category
+                    </td>
+
+                    <td tal:content="item/ModificationDate">
+                    08/19/2001 03:01 AM
+                    </td>
+
+                    <td>
+                        <a tal:attributes="href string:${here/absolute_url}/${template/id}?state=${review_state};
+                                           class string:state-$review_state"
+                           tal:content="structure python:test(review_state, review_state, '&nbsp;')"
+                           i18n:translate="">
+                            State
+                        </a>
+                    </td>
+
+                    <td>&nbsp;
+
+                        <span tal:repeat="release item/getRelatedReleases">
+                           <a tal:content="release" 
+                              tal:attributes="href string:${releaseFolderUrl}/${release}">
+                              [item]
+                           </a>
+                        </span>
+                    </td>
+                </tr>
+            </metal:block>
+            </tbody>
+        </table>
+
+        <a style="display:block; text-align:right"
+            href="" title="Show all"
+            tal:condition="state"
+            tal:attributes="href string:${here/absolute_url}/${template/id}"
+            i18n:attributes="title title_improvements_listing_show_all">
+            <span i18n:translate="label_improvements_listing_show_all">Show all</span>
+        </a>
+        
+        <p class="discreet"
+           tal:condition="not: plips"
+           i18n:translate="label_improvements_listing_no_proposals_added">
+        There are no improvement proposals added for any versions. Use the add
+        menu to add proposals and/or feature specifications to be used in the
+        roadmap.
+        </p>
+
+        <!-- Navigation -->
+        <div metal:use-macro="here/batch_macros/macros/navigation" />
+</div>
+
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_view.pt
new file mode 100644
index 0000000..3627fd7
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_improvements_view.pt
@@ -0,0 +1,113 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      lang="en-US"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="plone">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+
+<body>
+<div metal:fill-slot="main"
+     tal:define="view here/@@proposal_view;
+                 wtool context/portal_workflow;
+                 portal_type python:here.getPortalTypeName().lower();
+                 view_template python:'%s_view' % portal_type;
+                 view_macros python:path('here/%s/macros|nothing' % view_template);
+                 body_macro view_macros/body|nothing;
+                 errors python:request.get('errors', {})">
+
+    <h1>
+        <span tal:replace="view/title" />
+    </h1>
+        
+
+    <tal:fields define="fieldNames python: ['definitions',
+                                            'motivation', 
+                                            'assumptions',
+                                            'proposal', 
+                                            'implementation',
+                                            'deliverables',
+                                            'risks',
+                                            'timeline', 
+                                            'participants']">
+
+    <dl class="portlet" style="margin-left: 0.5em; width: 40%; float: right; clear: right;">
+        <dt class="portletHeader" i18n:translate="heading_improvements_contents">Contents</dt>
+        <dd class="portletItem">
+            <ol>
+                <tal:section tal:repeat="f fieldNames"> 
+                <li tal:define="field python: here.Schema()[f]"
+                    tal:condition="python: field.getAccessor(here)()">
+                    <a href="" 
+                        tal:attributes="href string:${here/absolute_url}#${field/getName}"
+                        tal:content="field/widget/label" />
+                </li>
+                </tal:section>
+            </ol>
+        </dd>
+    </dl>
+
+    <div tal:replace="structure provider:plone.belowcontenttitle" />
+
+    <p class="documentDescription"
+         tal:content="here/Description">
+         Description
+    </p>
+
+    <dl>
+        <dt i18n:translate="label_improvements_proposed_by">Proposed by</dt> <dd tal:content="here/getProposer" />
+        <tal:seconder tal:condition="here/getSeconder">
+        <dt i18n:translate="label_improvements_seconded_by">Seconded by</dt> <dd tal:content="here/getSeconder" />
+        </tal:seconder>
+        <dt i18n:translate="label_improvements_proposal_type">Proposal type</dt> <dd tal:content="python: ', '.join(here.getProposalTypes())" />     
+    
+        <tal:releases define="releases here/getBackReferences"
+                      condition="releases">
+            <dt i18n:translate="label_improvements_assigned_release">Assigned to release</dt> 
+            <dd>
+                <ul>
+                    <li tal:repeat="release releases">
+                        <a tal:attributes="href release/absolute_url"
+                             tal:content="release/Title"/>
+                    </li>
+                </ul>
+            </dd>
+        </tal:releases>
+    
+        <tal:branch condition="here/getBranch">
+        <dt i18n:translate="label_improvements_repository_branch">Repository branch</dt> 
+        <dd> <a tal:content="python: here.getBranch().split('/')[-1]"
+                tal:attributes="href here/getBranch">Branch name</a> </dd>
+        </tal:branch>
+
+        <dt i18n:translate="label_improvements_state">State</dt> <dd tal:content="python: wtool.getInfoFor(context, 'review_state')" />
+    </dl>
+
+    <div class="visualClear"></div>    
+
+    <tal:sections repeat="f fieldNames">
+        <tal:section tal:define="field python: here.Schema()[f]"
+                     tal:condition="python: field.getAccessor(here)()">
+            <a tal:attributes="name field/getName" 
+               tal:content="nothing">Anchor</a>
+            <h2 tal:content="field/widget/label" />
+            <span metal:use-macro="python: here.widget(field.getName(), 
+                                                       mode='view', 
+                                                       use_label=0)" />
+        </tal:section>
+    </tal:sections>
+
+    </tal:fields>
+
+</div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_project_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_project_view.pt
new file mode 100644
index 0000000..09401c6
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_project_view.pt
@@ -0,0 +1,269 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="here/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+<div metal:fill-slot="main"
+     tal:define="view context/@@project_view">
+
+  <div metal:define-macro="main" tal:define="latestRelease view/latest_release;
+                                             all_releases view/all_releases;
+                                             is_editable context/@@plone_context_state/is_editable;
+                                             upcomingReleases view/upcoming_releases | nothing">
+
+        <h1 class="documentFirstHeading">
+            <span tal:replace="here/title_or_id">Title or id</span>
+        </h1>
+        
+        <dl class="portalMessage error" tal:condition="context/mayBeUnmaintained">
+            <dt>Warning</dt>
+            <dd>This product has not had a release in over 1 year and may no longer be maintained. </dd>
+        </dl>
+
+        <div tal:content="structure provider:plone.belowcontenttitle" />
+        <p class="documentDescription"
+             tal:content="here/Description">
+            description
+        </p>
+        
+        <p class="portalMessage info"
+           tal:condition="python: is_editable and not view.is_public()"
+           i18n:domain="plone" i18n:translate="description_cannot_add_before_approved">
+           You can not add releases, documentation or feature proposals until the
+           project itself is approved, make sure you submit it for approval when
+           the relevant project information has been entered.
+        </p>
+
+        
+        <h2 i18n:translate="label_project_description">Project Description</h2>
+    
+        <div id="project_logo_wrapper"
+         tal:condition="here/getLogo | nothing">
+            <a tal:omit-tag="not: here/getLogoURL"
+               tal:attributes="href here/getLogoURL">
+                <img tal:replace="structure here/getLogo" />
+            </a>
+        </div>
+        
+        <div tal:replace="structure here/getText" />
+        
+        <div class="visualClear"></div>
+        
+        <tal:block tal:condition="python: view.has_criteria_info()">
+            <h2 i18n:translate="label_self_certification">Self-Certification</h2>
+            <tal:block repeat="criterion view/criteria_info">
+                <p>
+                    <tal:block condition="criterion/selected">[X]</tal:block>
+                    <tal:block condition="not:criterion/selected">[ ]</tal:block>
+                    <tal:block content="criterion/text" />
+                </p>
+            </tal:block>
+        </tal:block>
+        
+        <tal:block tal:condition="view/has_review_comment|nothing"> 
+            <h2 i18n:translate="label_independent_review">Independent Review</h2>
+            <p content="structure here/getReviewComment" /> 
+            <p tal:condition="here/isApproved|nothing">
+                <i i18n:translate="help_independent_review">This project has been approved via independent review.</i>
+            </p>
+        </tal:block> 
+        
+        <div class="visualClear"></div>
+        <tal:nostable condition="nocall:not:latestRelease">
+        
+                <h2 i18n:translate="label_current_stable_release">Current Release</h2>
+                <p
+                   i18n:translate="help_not_stable_release">
+                    No stable release available yet.
+                </p>
+
+                <tal:noreleases tal:condition="python:latestRelease is None and not upcomingReleases">
+
+                    <p class="discreet"
+                       tal:condition="here/getRepository">
+                        <span i18n:translate="label_resource_getting_code">
+                        If you are interested in getting the source code of 
+                        this project, you can get it from the
+                        </span>
+                        <a href=""
+                           class="link-plain"
+                           title="Version control repository location for this project"
+                           i18n:attributes="title title_resource_code_repository"
+                           tal:attributes="href here/getRepository">
+                           <span i18n:translate="label_resource_code_repository"> code repository</span>
+                        </a>.
+                    </p>
+
+                    <p class="discreet"
+                       tal:condition="python: is_editable and view.is_public()">
+                        <a i18n:translate="label_goto_release_folder"
+                           tal:attributes="href view/release_folder_url">
+                          Go to the release folder to add or publish a release.
+                        </a>
+                    </p>
+
+                    <p class="discreet"
+                       tal:condition="python:is_editable and view.is_public()">
+                         <tal:noreleases i18n:translate="description_no_available_releases">
+                            There are no published releases in this project yet.
+                         </tal:noreleases>
+                         <tal:prioritize i18n:translate="description_prioritize_releases">
+                            This listing will prioritize final releases,
+                            but will list the latest published release of any 
+                            other type if no final release exists. If you list
+                            the source code repository in this project, it 
+                            will show up, so people know where to go to check 
+                            out in the code in the meantime.
+                         </tal:prioritize>
+                    </p>
+
+                </tal:noreleases>
+
+        </tal:nostable>
+
+        
+        <tal:stable condition="nocall:latestRelease">
+        <div class="pane">
+           <h2>
+              Current Release <br />
+              <a href="#" title="Current release for the project"
+               i18n:attributes="title title_latest_release_project"
+               tal:attributes="href latestRelease/absolute_url"
+               tal:content="latestRelease/Title">Ploneboard 1.0
+              </a>
+            </h2>
+
+            <p class="discreet">
+                <tal:releasedate condition="latestRelease/effective">
+                    Released <span tal:replace="view/latest_release_date" />
+                </tal:releasedate>
+                
+                <tal:compatibility condition="latestRelease/getCompatibility">
+                    &mdash; tested with
+                    <metal:versions
+                     metal:use-macro="python:latestRelease.widget('compatibility')">
+                    Plone 1.0, Plone 2.0...
+                    </metal:versions>
+                </tal:compatibility>
+            </p>
+
+                <p tal:condition="latestRelease/Description">
+                <span tal:replace="latestRelease/Description">
+                 Main focus for this release is blah blah.
+                </span><br />
+                <a href="#"
+                   i18n:translate="label_release_details"
+                   tal:attributes="href latestRelease/absolute_url">More about this release&hellip;</a>
+                </p>
+                
+                <dl>
+                  <tal:downloads repeat="file latestRelease/contentValues">
+                  <dt>
+                      <a class="link-plain" title="Download file"
+                         i18n:attributes="title"
+                         tal:attributes="href file/@@file_view/direct_url">
+                        <img src="" alt="Download file" i18n:attributes="alt"
+                             style="float: left; clear:left; display: block; margin: 0 0.5em 0.5em 0;"
+                             tal:attributes="src string:${here/portal_url}/${file/@@file_view/downloadicon_name}" />
+                      </a>
+                      
+                      <a class="link-plain"
+                         tal:attributes="href file/@@file_view/direct_url">
+                        <span i18n:translate="label_get">Get</span>
+                        <span tal:replace="here/Title">Ploneboard 1.0</span>
+                        for
+                        <span tal:replace="file/getPlatform" /></a>
+                      
+                        <!--comment out size
+                        <span class="discreet"
+                                  tal:define="fileSize file/@@file_view/file_size">
+                              <tal:size tal:condition="fileSize">
+                                   (<span tal:replace="fileSize">256KB</span>)
+                              </tal:size>
+                              <tal:extsize condition="not: fileSize">
+                                  <tal:extfile condition="file/getExternalFileSize" tal:on-error="string:Unknown">
+                                  (<span tal:replace="file/getExternalFileSize">256KB</span>)
+                                  </tal:extfile>
+                              </tal:extsize>
+                        </span>
+                        -->
+                        </dt>
+
+                  <dd class="discreet" tal:content="file/Title">
+                          Windows installer.
+                  </dd>
+
+                  </tal:downloads>
+                  <dt>If you have difficulties with the installation of the extension see <A href="http://libreoffice.org">our howto on installing extensions</a> for more information.
+                  </dt>
+                </dl>
+        </div>
+        </tal:stable>
+        
+        <div class="pane">
+           <h2>All Releases</h2>
+           <table class="listing release_table">
+                <thead>
+                    <tr>
+                        <th>Version</th>
+                        <th>Released</th>
+                        <th>Description</th>
+                        <th>Compatibility</th>
+                        <th>Status</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tal:loop repeat="release all_releases">
+                        <tr tal:define="maturity   release/getMaturity;
+                            stable  python:maturity not in ['pre-release', 'alpha', 'beta'];
+                            stability    python:stable and 'stable-release' or 'unstable-release'"
+                            tal:attributes="class   stability">
+                            <td class="version">
+                                <a tal:content="release/id"
+                                    tal:attributes="href    release/absolute_url"/>
+                            </td>
+                            <td class="release-date">
+                                <span tal:condition="python:stable and release.effective()">
+                                    <span tal:replace="python:context.toLocalizedTime(release.effective())" />
+                                </span>
+                            </td>
+                            <td class="release-description">
+                                <span tal:content="release/Description"/>
+                                <a href="#"
+                                   i18n:translate="label_release_details"
+                                   tal:attributes="href release/absolute_url">More about this release&hellip;</a>
+
+                            </td>
+                            <td class="compatability">
+                                <tal:loop repeat="compatibility release/compatibility">
+                                    <div tal:content="compatibility"/>
+                                </tal:loop>
+                            </td>
+                            <td class="maturity" tal:content="maturity"/>
+                        </tr>
+                    </tal:loop>
+                </tbody>
+           </table>
+        </div>
+
+        <div class="visualClear"></div>
+
+    </div>
+
+</div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_listing.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_listing.pt
new file mode 100644
index 0000000..50361e7
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_listing.pt
@@ -0,0 +1,60 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="context/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<body>
+
+<!-- Macro used to show releases, since we need two near identical lists -->
+<!-- Call this with a variable 'releases' defined -->
+
+<metal:macro define-macro="release_listing">
+
+    <tal:releases repeat="release releases">
+
+        <div class="visualIEFloatFix" style="margin-top: 1em;">
+            
+            <dl>
+
+                <dt>
+                    <a href="#" title=""
+                       tal:content="release/Title"
+                       tal:attributes="href release/absolute_url;
+                                       title release/Title">Ploneboard 1.0</a>
+
+                    <tal:released condition="release/EffectiveDate">
+                    (<span tal:replace="python:context.toLocalizedTime(release.EffectiveDate())">
+                    Feb 1, 2009
+                    </span>)
+                    </tal:released>
+                </dt>
+
+                <dd>
+                    <span tal:replace="release/Description">
+                        Main focus for this release is blah blah.
+                    </span>
+
+                    <br />
+                    <a href="#" title="Read more&hellip;"
+                       i18n:attributes="title label_read_more"
+                       tal:attributes="href release/absolute_url">
+                       <span i18n:translate="label_read_more">Read more&hellip;</span>
+                    </a>
+
+                </dd>
+
+
+            </dl>
+        </div>
+
+        <div class="visualClear"></div>
+
+    </tal:releases>
+</metal:macro>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_view.pt
new file mode 100644
index 0000000..fb654f7
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_release_view.pt
@@ -0,0 +1,244 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+  xml:lang="en"
+  lang="en"
+  xmlns:tal="http://xml.zope.org/namespaces/tal"
+  xmlns:metal="http://xml.zope.org/namespaces/metal"
+  metal:use-macro="here/main_template/macros/master"
+  xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+  i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+<div metal:fill-slot="main">
+
+  <div metal:define-macro="main"
+        tal:define="view here/@@release_view;
+                    maturity here/getMaturity;
+                    released python:maturity != 'pre-release';
+                    final python:maturity == 'final';
+                    outdated view/is_outdated;
+                    is_editable context/@@plone_context_state/is_editable;
+                    wftool here/portal_workflow">
+
+    <h1 class="documentFirstHeading">
+      <span tal:replace="here/title_or_id">Title or id</span>
+      <span tal:condition="view/release_date">
+       (<span tal:replace="view/release_date">Feb 1, 2009</span>)
+      </span>
+    </h1>
+
+    <div style="float:right; margin: 0 0 1em 1em;"
+         tal:condition="here/getLogo | nothing">
+        <a tal:omit-tag="not: here/getLogoURL"
+           tal:attributes="href here/getLogoURL">
+            <img tal:replace="structure here/getLogo" />
+        </a>
+    </div>
+
+    <p class="portalMessage warning" tal:condition="python:outdated and released"
+       i18n:translate="label_message_no_longer_supported">
+    This release is no longer supported! If you are using this release,
+    please upgrade to a newer version if possible. 
+    </p>
+    
+    <p class="portalMessage info" tal:condition="not:final"
+       i18n:translate="label_message_not_final_release">
+    This is not a final release. Experimental releases should only be used for 
+    testing and development. Do not use these on production sites, and make 
+    sure you have proper backups before installing.
+    </p>
+
+    <p class="documentDescription"
+      tal:content="here/Description">
+      description
+    </p>
+
+    <p class="discreet"
+       tal:condition="python: is_editable and not released"
+       i18n:translate="label_message_not_released">
+    A release needs to be published before it will show up in the download
+    listings of the software center. You should make a release using the 
+    'state' drop-down when work on the release is completed and downloadable
+    files have been added. There is no approval required to make a release.
+    </p>
+
+    <p tal:define="parent_url python:here.aq_parent.aq_parent.absolute_url()"
+       tal:condition="parent_url">
+       <a href="" tal:attributes="href parent_url" title="The project page"
+          i18n:attributes="title title_release_additional_information">
+        <span i18n:translate="label_release_additional_information">
+          For additional information about this project, please visit the overview page
+        </span>
+       </a>.
+    </p>
+
+    <h2 i18n:translate="heading_available_downloads">
+      Available downloads
+    </h2>
+
+    <div style="margin-top: 1em;">
+
+      <tal:nodownloads tal:condition="not: here/contentValues">
+
+        <div class="discreet">
+          <span i18n:translate="description_no_available_files">
+            There are no available software files in this release yet.
+          </span>
+          <span tal:condition="is_editable"
+            i18n:translate="description_use_add_menu_to_add_files">
+            Use the Add menu to add software files.
+          </span>
+        </div>
+
+      </tal:nodownloads>
+
+        <div tal:repeat="file here/contentValues">
+          <a class="link-plain"
+             tal:attributes="href file/@@file_view/direct_url">
+            <img src="" alt="" 
+                 style="float: left; display: block; margin: 0 0.5em 0.5em 0;"
+                 tal:attributes="src string:${here/portal_url}/${file/@@file_view/downloadicon_name}" />
+          </a>
+  
+          <a class="link-plain"
+             tal:attributes="href file/@@file_view/direct_url">
+            <span tal:replace="file/Title">Product Package</span>
+          </a>
+    
+          <p class="discreet"
+                tal:define="fileSize file/@@file_view/file_size">
+            For
+            <span tal:replace="file/getPlatform" />
+            <tal:size tal:condition="fileSize">
+                 (<span tal:replace="fileSize">256KB</span>)
+            </tal:size>
+            <tal:extsize condition="not: fileSize">
+                <tal:extfile condition="file/getExternalFileSize" tal:on-error="string:Unknown">
+                (<span tal:replace="file/getExternalFileSize">256KB</span>)
+                </tal:extfile>
+            </tal:extsize>
+          </p>
+
+        </div>
+
+
+
+    </div>
+
+
+
+    <div class="visualClear"></div>
+
+    <tal:relnotes condition="here/getText">
+    <h2 i18n:translate="heading_release_notes">Release Notes</h2>
+
+    <table class="vertical listing" style="float: right; margin: 0 0 1em 1em;">
+        <tr tal:condition="here/compatibility">
+            <th i18n:translate="heading_tested_with">
+            Tested with
+            </th>
+            <td>
+                <metal:versions
+                 metal:use-macro="python:context.widget('compatibility')">
+                Plone 1.0, Plone 2.0...
+                </metal:versions>
+            </td>
+        </tr>
+        <tr>
+            <th i18n:translate="heading_state">State</th>
+            <td tal:content="python:wftool.getTitleForStateOnType(here.getMaturity(), 'PSCRelease')"
+                i18n:translate="">
+                Stable
+            </td>
+        </tr>
+        <tr tal:define="licenseData python:here.getDataGridRow('availableLicenses', here.getLicense())"
+            tal:condition="licenseData">
+            <th i18n:translate="heading_license">License</th>
+             <td>
+                <a class="link-plain"
+                   tal:content="licenseData/id"
+                   tal:attributes="href licenseData/url;
+                                   title licenseData/title"
+                    i18n:translate="">
+                    GPL
+                </a>
+            </td>
+        </tr>
+        <tr tal:condition="here/getReleaseManager">
+            <th i18n:translate="heading_relmanager">Release Manager</th>
+            <td>
+                <a href=""
+                   tal:omit-tag="not: here/getReleaseManagerContact"
+                   tal:attributes="href string:mailto:${here/getReleaseManagerContact}">
+                    <span tal:replace="here/getReleaseManager">Some Guy</span>
+                </a>
+            </td>
+        </tr>
+        <tr tal:condition="here/getExpectedReleaseDate">
+            <th tal:condition="not:released"
+                i18n:translate="heading_expecteddate">
+                Expected Release</th>
+            <th tal:condition="released"
+                i18n:translate="heading_released">
+                Released</th>
+            <td i18n:translate=""
+                tal:content="here/getExpectedReleaseDate">Date</td>
+        </tr>
+    </table>
+
+    <div tal:replace="structure here/getText" />
+
+    </tal:relnotes>
+
+    <div class="visualClear"></div>
+
+      <tal:proposals define="proposals here/getRelatedFeatures;"
+        condition="nocall:proposals"> 
+
+        <h2
+            i18n:translate="heading_feature_enhancements_release">
+          Feature enhancements in this release
+        </h2>
+
+        <p i18n:translate="help_feature_enhancements_release">
+        The following features are associated with this release:
+        </p>
+
+        <dl>
+            <tal:proposals repeat="proposal proposals">
+
+            <dt>
+              <a tal:attributes="href proposal/absolute_url;"
+                 tal:content="proposal/title_or_id">
+                #1: Improvement Title                     
+              </a>
+            </dt>
+
+            <dd tal:content="proposal/Description">
+            Improvement Description
+            </dd>
+
+            </tal:proposals>
+        </dl>
+
+      </tal:proposals>
+
+    <tal:changelog condition="here/getChangelog">
+      <h2 i18n:translate="heading_change_log">Change log</h2>
+
+      <div tal:replace="structure here/getChangelog"></div>
+    </tal:changelog>
+
+  </div>
+
+</div>
+
+</body>
+</html>
diff --git a/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_releasefolder_view.pt b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_releasefolder_view.pt
new file mode 100644
index 0000000..3a94550
--- /dev/null
+++ b/liboextensioncenter/am.liboextensioncenter/am/liboextensioncenter/skins/liboextensioncenter/psc_releasefolder_view.pt
@@ -0,0 +1,163 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xml:lang="en"
+      lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      metal:use-macro="context/main_template/macros/master"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="liboextensioncenter">
+
+<head>
+    <metal:css fill-slot="style_slot">
+      <style type="text/css" media="all"
+             tal:content="string:@import url($portal_url/liboextensioncenter.css);"></style>
+    </metal:css>
+</head>
+
+<body>
+
+<div metal:fill-slot="main"
+       tal:define="view context/@@releasefolder_view;
+                   is_editable context/@@plone_context_state/is_editable;
+                   wtool context/portal_workflow;">
+
+  <div metal:define-macro="main">
+
+        <h1 class="documentFirstHeading">
+            <span tal:replace="context/title_or_id">Title or id</span>
+        </h1>
+
+        <p class="documentDescription"
+             tal:content="context/Description">
+            description
+        </p>
+
+        <p>
+            <a href=""
+              class="link-parent"
+              i18n:translate="label_up_to_product_page"
+              tal:define="parent_url python:here.aq_parent.absolute_url()"
+              tal:condition="parent_url"
+              tal:attributes="href parent_url">
+              &laquo; Back to project page
+            </a>
+        </p>
+        <p class="portalMessage"
+           tal:condition="python: is_editable and wtool.getInfoFor(context.aq_parent, 'review_state')!='published'"
+           i18n:domain="plone" i18n:translate="description_cannot_add_before_approved">
+        You can not add releases, documentation or feature proposals until the 
+        project itself is approved, make sure you submit it for approval when 
+        the relevant project information has been entered.
+        </p>        
+
+        <tal:releases define="upcoming view/upcoming_releases;
+                              previous view/previous_releases">
+
+            <tal:noreleases condition="python:not(upcoming or previous)">
+                <div class="discreet">
+                    <span i18n:translate="description_no_available_releases">
+                        No releases found.
+                    </span>
+                    <span tal:condition="is_editable"
+                          i18n:translate="description_use_add_menu_to_add_releases">
+                        Use the Add menu to add releases.
+                    </span>
+                </div>
+            </tal:noreleases>
+
+
+<tal:comment replace="nothing">
+
+<!-- XXX Why does this release_listing macro fail w/traversal error? It appears to be a valid macro. -->
+
+            <tal:block define="global releases upcoming" condition="nocall:upcoming">
+                <h2 i18n:translate="heading_experimental_releases">Experimental Releases</h2>
+                <metal:macro use-macro="context/psc_release_listing/macros/release_listing"/>
+            </tal:block>
+
+            <tal:block define="global releases previous" condition="nocall:previous">
+                <h2 i18n:translate="heading_stable_releases">Stable Releases</h2>
+                <metal:macro use-macro="context/psc_release_listing/macros/release_listing"/>
+            </tal:block>
+
+</tal:comment>
+
+            <h2 i18n:translate="heading_experimental_releases">Experimental Releases</h2>
+            <tal:release_iter repeat="release upcoming">
+                <div class="visualIEFloatFix" style="margin-top: 1em;">
+                    <dl>
+                        <dt>
+                            <a href="#" title=""
+                               tal:content="release/Title"
+                               tal:attributes="href release/absolute_url;
+                                               title release/Title">Ploneboard 1.0</a>
+
+                            <tal:released condition="release/EffectiveDate">
+                            (<span tal:replace="python:context.toLocalizedTime(release.EffectiveDate())">
+                            Feb 1, 2009
+                            </span>)
+                            </tal:released>
+                        </dt>
+
+                        <dd>
+                            <span tal:replace="release/Description">
+                                Main focus for this release is blah blah.
+                            </span>
+
+                            <br />
+                            <a href="#" title="Read more&hellip;"
+                               i18n:attributes="title label_read_more"
+                               tal:attributes="href release/absolute_url">
+                               <span i18n:translate="label_read_more">Read more&hellip;</span>
+                            </a>
+
+                        </dd>
+                    </dl>
+                </div>
+                <div class="visualClear"></div>
+            </tal:release_iter>
+
+            <h2 i18n:translate="heading_stable_releases">Stable Releases</h2>
+            <tal:release_iter repeat="release previous">
+                <div class="visualIEFloatFix" style="margin-top: 1em;">
+                    <dl>
+                        <dt>
+                            <a href="#" title=""
+                               tal:content="release/Title"
+                               tal:attributes="href release/absolute_url;
+                                               title release/Title">Ploneboard 1.0</a>
+
+                            <tal:released condition="release/EffectiveDate">
+                            (<span tal:replace="python:context.toLocalizedTime(release.EffectiveDate())">
+                            Feb 1, 2009
+                            </span>)
+                            </tal:released>
+                        </dt>
+
+                        <dd>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list