|
From: mborch <svn...@pl...> - 2007-02-09 23:16:34
|
Author: mborch
Date: Fri Feb 9 23:16:30 2007
New Revision: 37017
Added:
PageBuilder/branches/
PageBuilder/branches/2.0/
PageBuilder/branches/2.0/Extensions/
PageBuilder/branches/2.0/Extensions/__init__.py
PageBuilder/branches/2.0/Extensions/install.py
PageBuilder/branches/2.0/README.txt
PageBuilder/branches/2.0/TODO.txt
PageBuilder/branches/2.0/__init__.py
PageBuilder/branches/2.0/browser.py
PageBuilder/branches/2.0/config.py
PageBuilder/branches/2.0/content/
PageBuilder/branches/2.0/content/__init__.py
PageBuilder/branches/2.0/content/_pagebuilder.py
PageBuilder/branches/2.0/content/_pagerow.py
PageBuilder/branches/2.0/content/common.py
PageBuilder/branches/2.0/profiles/
PageBuilder/branches/2.0/profiles/default/
PageBuilder/branches/2.0/profiles/default/cssregistry.xml
PageBuilder/branches/2.0/profiles/default/factorytool.xml
PageBuilder/branches/2.0/profiles/default/skins.xml
PageBuilder/branches/2.0/profiles/default/types/
PageBuilder/branches/2.0/profiles/default/types.xml
PageBuilder/branches/2.0/profiles/default/types/PageBuilder.xml
PageBuilder/branches/2.0/profiles/default/types/PageRow.xml
PageBuilder/branches/2.0/skins/
PageBuilder/branches/2.0/skins/PageBuilder/
PageBuilder/branches/2.0/skins/PageBuilder/edit_icon.gif (contents, props changed)
PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_default_view.gif (contents, props changed)
PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_largeleft_view.gif (contents, props changed)
PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_largeright_view.gif (contents, props changed)
PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder.css.dtml
PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_contentviews.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_edit.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_icon.gif (contents, props changed)
PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_view.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagerow_default_view.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeleft_view.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeright_view.pt
PageBuilder/branches/2.0/skins/PageBuilder/pagerow_macros.pt
PageBuilder/branches/2.0/skins/PageBuilder/setViewTemplate.py
PageBuilder/branches/2.0/version.txt
Log:
Initial import.
Added: PageBuilder/branches/2.0/Extensions/__init__.py
==============================================================================
Added: PageBuilder/branches/2.0/Extensions/install.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/Extensions/install.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,20 @@
+from StringIO import StringIO
+from Products.CMFCore import utils as cmfutils
+from Products.CMFPlone.utils import getToolByName
+from Products import PageBuilder
+
+def setup_gs_profile(portal, out):
+ setup_tool = cmfutils.getToolByName(portal, 'portal_setup')
+ for extension_id in ['profile-PageBuilder:default']:
+ try:
+ setup_tool.setImportContext('profile-%s' % extension_id)
+ setup_tool.runAllImportSteps()
+ except Exception, e:
+ print >> out, "error while trying to GS import %s (%s, %s)" \
+ % (extension_id, repr(e), str(e))
+ setup_tool.setImportContext('profile-PageBuilder:default')
+
+def install(portal):
+ out = StringIO()
+
+ setup_gs_profile(portal, out)
Added: PageBuilder/branches/2.0/README.txt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/README.txt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,46 @@
+PageBuilder
+===========
+
+:: requirements
+
+ Plone 2.5+
+
+:: about
+
+PageBuilder is a content type for aggregating and displaying multiple content
+types on a single page.
+
+It installs three content-types:
+
+ * PageBuilder
+ * PageRow
+ * PageColumn
+
+A PageRow-object can be used to spread content horizontally. To support special
+column layouts and styles, the PageColumn type implements CMFDynamicViewFTI
+to select the view template.
+
+Note that any Archetypes-based content can be used in place of PageRow and
+PageColumn.
+
+:: release info
+
+This release is a complete rewrite of the previous PageBuilder product. Currently
+it does not have any migration tools built-in to allow moving content from
+previous branches.
+
+:: information for integrators and developers
+
+Use pagebuilder.css.dtml as reference for supplying toolbar-icons for your own
+views.
+
+:: credits
+
+Malthe Borch <mb...@gm...>
+Sune Toft <su...@he...>
+
+This product is based on ideas in the mxmDynamicPage product by Max M. Rasmussen.
+
+:: sponsors
+
+All work on this product has been sponsored by Headnet (http://www.headnet.dk).
\ No newline at end of file
Added: PageBuilder/branches/2.0/TODO.txt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/TODO.txt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,13 @@
+Feb 9th, 2007:
+
+ * Add event hooks (if possible) to set creation id to added objects.
+ IDs should be enumerated 1,2,3 etc. for simplicity.
+
+ * Add PageColumn-type
+
+ * Add example styles (views) for columns
+
+ * Add column toolbar that allows moving left and right within a row,
+ easy deletion and access to select views.
+
+ * Import GS profile by default (this doesn't work now for some reason).
\ No newline at end of file
Added: PageBuilder/branches/2.0/__init__.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/__init__.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,35 @@
+from Products.GenericSetup import EXTENSION
+from Products.GenericSetup import profile_registry
+
+from Products.CMFCore.DirectoryView import registerDirectory
+import Products.CMFPlone.interfaces
+
+# Make the skins available as DirectoryViews
+registerDirectory( 'skins', globals() )
+
+def initialize(context):
+ from Products.PageBuilder import content
+ from Products.CMFCore import utils as cmfutils
+ from Products.Archetypes import atapi
+
+ all_content_types, \
+ all_constructors, \
+ all_ftis = atapi.process_types(atapi.listTypes('PageBuilder'),
+ 'PageBuilder')
+
+ cmfutils.ContentInit('PageBuilder Content',
+ content_types = all_content_types,
+ permission = 'Add PageBuilder content',
+ extra_constructors = all_constructors,
+ fti = all_ftis,
+ ).initialize(context)
+
+ profile_registry.registerProfile(
+ name='default',
+ title='PageBuilder profile',
+ description='Profile for PageBuilder',
+ path='profiles/default',
+ product='PageBuilder',
+ profile_type=EXTENSION,
+ for_=Products.CMFPlone.interfaces.IPloneSiteRoot)
+
Added: PageBuilder/branches/2.0/browser.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/browser.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,6 @@
+from zope import interface
+from zope.formlib import form
+from Products.CMFCore import utils as cmfutils
+from Products.Five.browser import pagetemplatefile
+from Products.Five.formlib import formbase
+from Products import Five
Added: PageBuilder/branches/2.0/config.py
==============================================================================
Added: PageBuilder/branches/2.0/content/__init__.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/content/__init__.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,2 @@
+from Products.PageBuilder.content._pagebuilder import PageBuilder
+from Products.PageBuilder.content._pagerow import PageRow
Added: PageBuilder/branches/2.0/content/_pagebuilder.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/content/_pagebuilder.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,117 @@
+from AccessControl import ClassSecurityInfo
+
+from Products.Archetypes import atapi
+from Products.ATContentTypes.content import document
+from Products.ATReferenceBrowserWidget.ATReferenceBrowserWidget import *
+from Products.CMFCore.CMFCorePermissions import View, ModifyPortalContent
+
+from Products.PageBuilder.content.common import LayoutContainer
+
+# CMFDynamicViewFTI imports
+from Products.CMFDynamicViewFTI.browserdefault import BrowserDefaultMixin
+
+product_schema = atapi.BaseContent.schema.copy() + atapi.Schema((
+ atapi.StringField(
+ name='title',
+ searchable=True,
+ widget=atapi.StringWidget(
+ label='Title',
+ label_msgid='PageBuilder_label_title',
+ i18n_domain='PageBuilder',
+ )
+ ),
+
+ atapi.TextField(
+ name='description',
+ searchable=True,
+ widget=atapi.TextAreaWidget(
+ label='Description',
+ label_msgid='PageBuilder_label_description',
+ i18n_domain='PageBuilder',
+ )
+ ),
+
+ atapi.TextField('text',
+ default_content_type='text/html',
+ default_output_type='text/html',
+ searchable=True,
+ allowable_content_types=('text/plain', 'text/structured', 'text/html',),
+ widget=atapi.RichWidget(
+ label='Text',
+ label_msgid='PageBuilder_label_text',
+ description_msgid='PageBuilder_help_text',
+ i18n_domain='PageBuilder',
+ ),
+ ),
+
+ atapi.ReferenceField(
+ name='link',
+ relationship='KnowsAbout',
+ multiValued = 0,
+ allowed_types = (),
+ widget=ReferenceBrowserWidget(
+ label='Content reference',
+ label_msgid='PageBuilder_label_content_reference',
+ description='Select an item to link to',
+ description_msgid='PageBuilder_description_content_reference',
+ i18n_domain='PageBuilder',
+ startup_directory='/',
+ ),
+ ),
+))
+
+# move description to main edit page
+product_schema['description'].schemata = 'default'
+
+class PageBuilder(LayoutContainer, BrowserDefaultMixin, atapi.OrderedBaseFolder):
+ __implements__ = (getattr(atapi.OrderedBaseFolder,'__implements__',()), \
+ getattr(BrowserDefaultMixin,'__implements__',()))
+
+ meta_type = 'PageBuilder'
+
+ schema = product_schema
+ _at_rename_after_creation = True
+
+ _automatic_add_row = False
+
+ security = ClassSecurityInfo()
+
+ security.declarePrivate('at_post_create_script')
+ def at_post_create_script(self):
+ "Adds the first row automatically"
+
+ if _automatic_add_row:
+ self.addPageRow()
+
+ # self.invokeFactory('PageRow', 'row_1')
+
+ security.declareProtected(ModifyPortalContent, 'reorderObject')
+ def reorderObject(self, id, position, REQUEST=None):
+ "Move a pagerow up or down the page"
+
+ if position.lower()=='up':
+ self.moveObjectsUp(id)
+
+ if position.lower()=='down':
+ self.moveObjectsDown(id)
+
+ if position.lower()=='top':
+ self.moveObjectsToTop(id)
+
+ if position.lower()=='bottom':
+ self.moveObjectsToBottom(id)
+
+ # order folder by field
+ # id in this case is the field
+ if position.lower()=='ordered':
+ self.orderObjects(id)
+
+ self.plone_utils.reindexOnReorder(self)
+
+ if not REQUEST is None:
+ REQUEST.RESPONSE.redirect(self.absolute_url() + '/pagebuilder_edit')
+
+ def SearchableText(self):
+ return self.aggregateSearchableText()
+
+atapi.registerType(PageBuilder, 'PageBuilder')
Added: PageBuilder/branches/2.0/content/_pagerow.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/content/_pagerow.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,42 @@
+from AccessControl import ClassSecurityInfo
+
+from Products.Archetypes import atapi
+from Products.ATContentTypes.content import document
+from Products.ATReferenceBrowserWidget import ATReferenceBrowserWidget
+
+from Products.PageBuilder.content.common import LayoutContainer
+
+# CMFDynamicViewFTI imports
+from Products.CMFDynamicViewFTI.browserdefault import BrowserDefaultMixin
+
+site_schema = atapi.BaseContent.schema.copy() + atapi.Schema((
+ atapi.StringField(
+ name='title',
+ accessor='Title',
+ required=False,
+ widget=atapi.StringWidget(
+ label='Title',
+ label_msgid='PageBuilder_label_title',
+ i18n_domain='PageBuilder',
+ )
+ ),
+))
+
+# move description to main edit page
+site_schema['description'].schemata = 'default'
+
+class PageRow(BrowserDefaultMixin, LayoutContainer, atapi.OrderedBaseFolder):
+ __implements__ = (getattr(atapi.OrderedBaseFolder,'__implements__',()), \
+ getattr(BrowserDefaultMixin,'__implements__',()))
+
+ meta_type = 'PageRow'
+
+ schema = site_schema
+ _at_rename_after_creation = True
+
+ security = ClassSecurityInfo()
+
+ def SearchableText(self):
+ return self.aggregateSearchableText()
+
+atapi.registerType(PageRow, 'PageBuilder')
Added: PageBuilder/branches/2.0/content/common.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/content/common.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,48 @@
+from AccessControl import ClassSecurityInfo
+
+from Products.CMFCore.permissions import View
+from Products.Archetypes import atapi
+from Products.CMFCore.utils import getToolByName
+
+try:
+ from Products.CMFDynamicViewFTI.interfaces import ISelectableBrowserDefault
+ HAS_ISBD = True
+except ImportError:
+ HAS_ISBD = False
+
+class LayoutContainer(object):
+ """
+ Container that provides aggregate search and display
+ functionality.
+ """
+
+ security = ClassSecurityInfo()
+
+ security.declareProtected(View, 'getTargetObjectLayout')
+ def getTargetObjectLayout(self, target):
+ """
+ Returns target object 'view' action page template
+ """
+
+ if HAS_ISBD and ISelectableBrowserDefault.isImplementedBy(target):
+ return target.getLayout()
+ else:
+ view = target.getTypeInfo().getActionById('view') or 'base_view'
+
+ # If view action is view, try to guess correct template
+ if view == 'view':
+ view = target.portal_type.lower() + '_view'
+
+ return view
+
+ def aggregateSearchableText(self):
+ """Append references' searchable fields."""
+
+ data = [super(LayoutContainer, self).SearchableText(),]
+
+ for child in self.contentValues():
+ data.append(child.SearchableText())
+
+ data = ' '.join(data)
+
+ return data
\ No newline at end of file
Added: PageBuilder/branches/2.0/profiles/default/cssregistry.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/cssregistry.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<object name="portal_css" meta_type="Stylesheets Registry">
+ <stylesheet title="" cacheable="True" compression="safe" cookable="True"
+ enabled="1" expression="" id="pagebuilder.css" media="all" rel="stylesheet"
+ rendering="import"/>
+</object>
\ No newline at end of file
Added: PageBuilder/branches/2.0/profiles/default/factorytool.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/factorytool.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<object name="portal_factory" meta_type="Plone Factory Tool">
+ <factorytypes>
+ <type portal_type="PageBuilder"/>
+ <type portal_type="PageRow"/>
+ </factorytypes>
+</object>
Added: PageBuilder/branches/2.0/profiles/default/skins.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/skins.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<object name="portal_skins">
+ <object name="PageBuilder"
+ meta_type="Filesystem Directory View"
+ directory="PageBuilder/skins/PageBuilder"/>
+ <skin-path name="*">
+ <layer name="PageBuilder"/>
+ </skin-path>
+</object>
\ No newline at end of file
Added: PageBuilder/branches/2.0/profiles/default/types.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/types.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<object name="portal_types" meta_type="Plone Types Tool">
+
+<object name="PageBuilder"
+ meta_type="Factory-based Type Information with dynamic views"/>
+<object name="PageRow"
+ meta_type="Factory-based Type Information with dynamic views"/>
+
+</object>
Added: PageBuilder/branches/2.0/profiles/default/types/PageBuilder.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/types/PageBuilder.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<object name="PageBuilder"
+ meta_type="Factory-based Type Information with dynamic views"
+ xmlns:i18n="http://xml.zope.org/namespaces/i18n">
+ <property name="title">PageBuilder</property>
+ <property
+ name="description">A content layout container which can display its element in various layouts.</property>
+ <property name="content_icon">pagebuilder_icon.gif</property>
+ <property name="content_meta_type">PageBuilder</property>
+ <property name="product">PageBuilder</property>
+ <property name="factory">addPageBuilder</property>
+ <property name="immediate_view">pagebuilder_view</property>
+ <property name="global_allow">True</property>
+ <property name="filter_content_types">False</property>
+ <property name="allowed_content_types">
+ <element value="PageRow"/>
+ </property>
+ <property name="allow_discussion">False</property>
+ <property name="default_view">pagebuilder_view</property>
+ <property name="view_methods">
+ <element value="folder_summary_view"/>
+ <element value="folder_tabular_view"/>
+ <element value="folder_listing"/>
+ <element value="pagebuilder_view"/>
+ </property>
+ <alias from="(Default)" to="(dynamic view)"/>
+ <alias from="edit" to="atct_edit"/>
+ <alias from="index.html" to="(dynamic view)"/>
+ <alias from="properties" to="base_metadata"/>
+ <alias from="sharing" to="folder_localrole_form"/>
+ <alias from="view" to="(selected layout)"/>
+ <action title="View" action_id="view" category="object" condition_expr=""
+ url_expr="string:${folder_url}/" visible="True">
+ <permission value="View"/>
+ </action>
+ <action title="Edit" action_id="edit" category="object" condition_expr=""
+ url_expr="string:${object_url}/pagebuilder_edit" visible="True">
+ <permission value="Modify portal content"/>
+ </action>
+ <action title="Properties" action_id="metadata" category="object"
+ condition_expr="" url_expr="string:${object_url}/properties"
+ visible="True">
+ <permission value="Modify portal content"/>
+ </action>
+ <action title="References" action_id="references" category="object"
+ condition_expr="object/archetype_tool/has_graphviz"
+ url_expr="string:${object_url}/reference_graph" visible="True">
+ <permission value="Modify portal content"/>
+ <permission value="Review portal content"/>
+ </action>
+ <action title="Folder Listing" action_id="folderlisting" category="folder"
+ condition_expr="object/isPrincipiaFolderish"
+ url_expr="string:${folder_url}/view" visible="False">
+ <permission value="View"/>
+ </action>
+ <action title="Sharing" action_id="local_roles" category="object"
+ condition_expr="" url_expr="string:${object_url}/sharing" visible="True">
+ <permission value="Manage properties"/>
+ </action>
+ <action title="State" action_id="content_status_history"
+ category="object_tabs"
+ condition_expr="python:object and portal.portal_workflow.getTransitionsFor(object, object.getParentNode())"
+ url_expr="string:$object_url/content_status_history" visible="False">
+ <permission value="View"/>
+ </action>
+ <action title="External Edit" action_id="external_edit" category="object"
+ condition_expr="" url_expr="string:$object_url/external_edit"
+ visible="False">
+ <permission value="Modify portal content"/>
+ </action>
+</object>
Added: PageBuilder/branches/2.0/profiles/default/types/PageRow.xml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/profiles/default/types/PageRow.xml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<object name="PageRow"
+ meta_type="Factory-based Type Information with dynamic views"
+ xmlns:i18n="http://xml.zope.org/namespaces/i18n">
+ <property name="title">PageRow</property>
+ <property
+ name="description">A page row which can contain page columns.</property>
+ <property name="content_icon">folder_icon.gif</property>
+ <property name="content_meta_type">PageRow</property>
+ <property name="product">PageBuilder</property>
+ <property name="factory">addPageRow</property>
+ <property name="immediate_view">pagerow_default_view</property>
+ <property name="global_allow">False</property>
+ <property name="filter_content_types">False</property>
+ <property name="allowed_content_types"/>
+ <property name="allow_discussion">False</property>
+ <property name="default_view">pagerow_default_view</property>
+ <property name="view_methods">
+ <element value="pagerow_default_view"/>
+ <element value="pagerow_largeleft_view"/>
+ <element value="pagerow_largeright_view"/>
+ </property>
+ <alias from="(Default)" to="(dynamic view)"/>
+ <alias from="edit" to="atct_edit"/>
+ <alias from="index.html" to="(dynamic view)"/>
+ <alias from="properties" to="base_metadata"/>
+ <alias from="sharing" to="folder_localrole_form"/>
+ <alias from="view" to="(selected layout)"/>
+ <action title="View" action_id="view" category="object" condition_expr=""
+ url_expr="string:${folder_url}/" visible="True">
+ <permission value="View"/>
+ </action>
+ <action title="Edit" action_id="edit" category="object" condition_expr=""
+ url_expr="string:${object_url}/edit" visible="True">
+ <permission value="Modify portal content"/>
+ </action>
+ <action title="Properties" action_id="metadata" category="object"
+ condition_expr="" url_expr="string:${object_url}/properties"
+ visible="True">
+ <permission value="Modify portal content"/>
+ </action>
+ <action title="References" action_id="references" category="object"
+ condition_expr="object/archetype_tool/has_graphviz"
+ url_expr="string:${object_url}/reference_graph" visible="True">
+ <permission value="Modify portal content"/>
+ <permission value="Review portal content"/>
+ </action>
+ <action title="Folder Listing" action_id="folderlisting" category="folder"
+ condition_expr="object/isPrincipiaFolderish"
+ url_expr="string:${folder_url}/view" visible="False">
+ <permission value="View"/>
+ </action>
+ <action title="Sharing" action_id="local_roles" category="object"
+ condition_expr="" url_expr="string:${object_url}/sharing" visible="True">
+ <permission value="Manage properties"/>
+ </action>
+ <action title="State" action_id="content_status_history"
+ category="object_tabs"
+ condition_expr="python:object and portal.portal_workflow.getTransitionsFor(object, object.getParentNode())"
+ url_expr="string:$object_url/content_status_history" visible="False">
+ <permission value="View"/>
+ </action>
+ <action title="External Edit" action_id="external_edit" category="object"
+ condition_expr="" url_expr="string:$object_url/external_edit"
+ visible="False">
+ <permission value="Modify portal content"/>
+ </action>
+</object>
Added: PageBuilder/branches/2.0/skins/PageBuilder/edit_icon.gif
==============================================================================
Binary file. No diff available.
Added: PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_default_view.gif
==============================================================================
Binary file. No diff available.
Added: PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_largeleft_view.gif
==============================================================================
Binary file. No diff available.
Added: PageBuilder/branches/2.0/skins/PageBuilder/icon-pagerow_largeright_view.gif
==============================================================================
Binary file. No diff available.
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder.css.dtml
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder.css.dtml Fri Feb 9 23:16:30 2007
@@ -0,0 +1,203 @@
+/* <dtml-with base_properties> (do not remove this :)
+ <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */
+
+.pagebuider-row {
+ margin-bottom: 1em;
+}
+
+/* toolbar icons */
+
+
+.display-pagerow_default_view {
+ background-image: url(icon-pagerow_default_view.gif) !important;
+}
+
+.display-pagerow_largeleft_view {
+ background-image: url(icon-pagerow_largeleft_view.gif) !important;
+}
+
+.display-pagerow_largeright_view {
+ background-image: url(icon-pagerow_largeright_view.gif) !important;
+}
+
+/* toolbar layout */
+
+#pagebuilder .pagebuilder-toolbar #navlist .toolbarIcon a.selected {
+ border: 1px solid &dtml-notifyBorderColor;;
+ background: transparent;
+}
+
+.pagebuilder-ordering {
+ float: right;
+ margin-left: -6px;
+ margin-top: 4px;
+}
+
+* html #pagebuilder .pagebuilder-toolbar #navlist li {
+height: 1%;
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist li.separator {
+ margin: 0 1em 0 1em;
+}
+
+#pagebuilder .pagebuilder-toolbar span {
+ padding-right: 10px;
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist
+{
+border: 1px solid &dtml-contentViewBorderColor;;
+border-top: none;
+padding: 0 0 0 5px;
+margin: 0;
+background-color: &dtml-contentViewBackgroundColor;;
+
+ font-size: 0.8em;
+ color: &dtml-discreetColor;;
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist li
+{
+display: inline;
+list-style: none;
+padding: 3px;
+background-position: center center;
+line-height: 18px;
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist .utility
+{
+
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist .utility a
+{
+padding-right: 4px;
+}
+
+#pagebuilder .pagebuilder-toolbar #navlist li a
+{
+text-decoration: none;
+padding-right: 10px;
+background-color: transparent;
+color: #000;
+border: none;
+}
+
+* html #pagebuilder .pagebuilder-toolbar #navlist li a { padding: 0 8px; }
+
+#pagebuilder .pagebuilder-toolbar #navlist li a:hover {
+
+}
+
+/* pagerow layout */
+
+.pagebuilder-quickedit {
+ float: right;
+}
+
+#pagebuilder .pagebuilder-row {
+ min-height:100%;
+ margin-left:auto;
+ margin-right:auto;
+ background:transparent url(images/3-colcentred-blueshade.gif) repeat-y center top;
+ text-align:left;
+ position:relative;
+ width: 100%;
+}
+* html #pagebuilder .pagebuilder-row {
+ width:100%px;
+ height:100%;
+}
+
+#pagebuilder #block_1,
+#pagebuilder #block_2 {
+ float:left;
+}
+
+#pagebuilder #block_3 {
+ float: left;
+}
+
+#pagebuilder .pagebuilder-row #block_1 div.pagebuilder-object {
+ margin-right: 5px;
+}
+
+#pagebuilder .pagebuilder-row #block_2 div.pagebuilder-object {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+#pagebuilder .pagebuilder-row #block_3 div.pagebuilder-object {
+ margin-left: 5px;
+}
+
+/* column configurations */
+
+#pagebuilder .one-column #block_1 {
+ width: 100%;
+}
+
+#pagebuilder .two-columns-equal #block_1,
+#pagebuilder .two-columns-equal #block_2 {
+ width:50%;
+}
+
+#pagebuilder .two-columns-equal #block_2 { width:49.9%; }
+
+#pagebuilder .three-columns-equal #block_1,
+#pagebuilder .three-columns-equal #block_2 {
+ width:33%;
+}
+
+#pagebuilder .three-columns-equal #block_3 {
+ width: 33.9%;
+}
+
+#pagebuilder .three-columns-equal #block_2 { width:32.9%; }
+
+/* styles for hiding unwanted document metadata and actions */
+
+#pagebuilder .pagebuilder-object .documentByLine,
+#pagebuilder .pagebuilder-object .documentActions,
+#pagebuilder .pagebuilder-object .link-parent{
+ display: none;
+}
+
+#pagebuilder .two-columns-largeleft #block_1 {
+ width: 60%;
+}
+#pagebuilder .two-columns-largeleft #block_2 {
+ width: 40%;
+}
+
+#pagebuilder .three-columns-largeleft #block_1,
+#pagebuilder .three-columns-largeleft #block_2 {
+ width:60%;
+}
+
+#pagebuilder .three-columns-largeleft #block_3 {
+ width: 20%;
+}
+
+#pagebuilder .three-columns-largeleft #block_2 { width:19.9%; }
+
+#pagebuilder .two-columns-largeright #block_2 {
+ width: 60%;
+}
+#pagebuilder .two-columns-largeright #block_1 {
+ width: 40%;
+}
+
+#pagebuilder .three-columns-largeright #block_3 {
+ width:60%;
+}
+
+#pagebuilder .three-columns-largeright #block_1 {
+ width: 20%;
+}
+
+#pagebuilder .three-columns-largeright #block_2 { width:19.9%; }
+
+/* </dtml-with> */
\ No newline at end of file
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_contentviews.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_contentviews.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,183 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xml:lang="en"
+ lang="en"
+ i18n:domain="plone">
+
+<body>
+
+ <div metal:define-macro="content_views"
+ tal:omit-tag=""
+ tal:define="default_tab default_tab | request/default_tab | string:view;
+ view_actions python:here.plonifyActions(template_id=template_id, actions=actions, default_tab=default_tab)">
+
+ <h5 class="hiddenStructure"
+ tal:condition="view_actions"
+ i18n:translate="heading_views">Views</h5>
+
+ <ul class="contentViews"
+ i18n:domain="plone">
+
+ <tal:views repeat="action view_actions">
+ <li tal:define="selected action/selected|nothing;"
+ tal:attributes="id string:contentview-${action/id};
+ class python:test(selected, 'selected', 'plain')">
+ <a href=""
+ tal:content="action/title"
+ tal:attributes="href action/url;"
+ i18n:translate="">
+ View name
+ </a>
+ </li>
+ </tal:views>
+
+ </ul>
+
+ </div>
+
+ <div metal:define-macro="content_actions"
+ i18n:domain="plone"
+ class="contentActions"
+ tal:define="content_actions actions/object_actions|nothing;">
+
+ <h5 class="hiddenStructure"
+ tal:condition="content_actions | wf_state"
+ i18n:translate="heading_actions">Actions</h5>
+
+ <ul tal:condition="content_actions" class="actionItems">
+ <li tal:repeat="action content_actions"
+ tal:attributes="id string:contentaction-${action/id};">
+
+ <a class="" href=""
+ tal:attributes="href action/url;">
+
+ <img alt="" src=""
+ tal:define="actionid action/id;
+ icon python:portal.portal_actionicons.renderActionIcon('content_actions', actionid, None);"
+ tal:condition="icon"
+ tal:replace="structure icon" />
+
+ <tal:action tal:content="action/title" i18n:translate="">
+ Action name
+ </tal:action>
+ </a>
+
+ </li>
+ </ul>
+
+ <div metal:use-macro="here/global_contentmenu/macros/contentMenu">
+ Insert Add Content and Publishing pulldown.
+ </div>
+
+ </div>
+
+ <metal:toolbar metal:define-macro="content_menu_toolbar">
+ <tal:structuralFolder define="plone_view here/@@plone;
+ manage_portal python:checkPermission('Manage portal', here);
+ parent_folder plone_view/getCurrentFolder;
+ create_id python: str(len(here.getFolderContents())+1);
+ disableMenu python:here.portal_factory.isTemporary(here);
+ useSelf python:isStructuralFolder and not isContextDefaultPage;"
+ condition="plone_view/isStructuralFolder">
+
+ <tal:add define="addContext nocall:parent_folder;
+ allowedTypes addContext/getAllowedTypes;
+ menuTypes python:here.getAddableTypesInMenu(allowedTypes);
+ numAllowed python:len(allowedTypes);
+ numMenu python:len(menuTypes);
+ showSettings addContext/canConstrainTypes;
+ showMore python:numAllowed > numMenu;
+ showMenu python:showMore or showSettings or numMenu > 1;"
+ condition="python:numAllowed >= 1 or showSettings">
+
+ <tal:dropdown tal:condition="showMenu">
+ <li class="separator">
+ |
+ </li>
+ <tal:types repeat="ctype menuTypes">
+ <li tal:define="Title ctype/Title; Id ctype/getId; Description ctype/Description;
+ item_type_class python: 'visualIcon contenttype-' + normalizeString(Id);"
+ tal:attributes="class string:${item_type_class}">
+ <a href="#"
+ i18n:attributes="title"
+ tal:attributes="href string:${addContext/absolute_url}/createObject?type_name=${Id}&id=$create_id;
+ title string:$Title: $Description">
+
+ </a>
+ </li>
+ </tal:types>
+ <li tal:condition="showMore">
+ <a href="#" class="folderAddMore" title="Show all available content types"
+ i18n:attributes="title title_show_all_content_types;"
+ tal:attributes="href string:${addContext/absolute_url}/folder_factories;">
+ <tal:title i18n:translate="folder_add_more">
+ More…
+ </tal:title>
+ </a>
+ </li>
+ <li class="actionSeparator" tal:condition="showSettings">
+ <a href="#" class="folderAddSettings" title="Configure which content types can be added here"
+ i18n:attributes="title title_configure_addable_content_types;"
+ tal:attributes="href string:${addContext/absolute_url}/folder_constraintypes_form;">
+ <tal:title i18n:translate="folder_add_settings">
+ Restrict…
+ </tal:title>
+ </a>
+ </li>
+
+
+ </tal:dropdown>
+ </tal:add>
+ </tal:structuralFolder>
+ </metal:toolbar>
+
+ <metal:display metal:define-macro="content_display_toolbar">
+ <tal:displayMenu define="manage_portal python:checkPermission('Manage portal', here);
+ parent_folder plone_view/getCurrentFolder;
+ disableMenu python:here.portal_factory.isTemporary(here);
+ useSelf python:isStructuralFolder and not isContextDefaultPage;
+ contextHasIndexHtml context/hasIndexHtml;
+ folderHasIndexHtml parent_folder/hasIndexHtml;
+ parentVocab parent_folder/getSelectableViews;
+ contextVocab here/getSelectableViews;
+ canSelectDefaultFolderPage parent_folder/canSelectDefaultPage;
+ canSelectDefaultContextPage python:here.canSelectDefaultPage() and not isContextDefaultPage;
+ parentHasActions python:(parentVocab and len(parentVocab) > 1) or canSelectDefaultFolderPage;
+ contextHasActions python:(contextVocab and len(contextVocab) > 1) or canSelectDefaultContextPage;
+ dimMenu python:(isStructuralFolder and contextHasIndexHtml) or
+ (isContextDefaultPage and folderHasIndexHtml);"
+ condition="python:(isContextDefaultPage and parentHasActions) or contextHasActions">
+
+
+ <!-- Context views menu: A document with selectable views, or a folder with no default-page selected.
+ Note: We turn off selection of a default-page regardless of the capabilities of the folder
+ if we're looking at a default-page of a folderish item that is itself the default-page
+ of a folder. Transitive default-pages are just too confusing.
+ -->
+
+ <tal:contextViewsSelection
+ define="vocab contextVocab;
+ defaultPageId context/getDefaultPage;
+ defaultPage python:defaultPageId is not None and getattr(here, defaultPageId, None) or None;
+ selectedLayout python:defaultPage is None and context.getLayout() or ''"
+ condition="python:vocab">
+
+ <tal:layouts repeat="layout vocab">
+ <li tal:define="value python:layout[0];
+ display python:layout[1];"
+ tal:attributes="class string: visualIcon contenttype-folder display-$value toolbarIcon">
+
+ <a href="#"
+ tal:attributes="class python: test(value==selectedLayout, 'selected', None);
+ href string:${here/absolute_url}/setViewTemplate?templateId=$value;
+ title display"
+ i18n:attributes="title"
+ i18n:translate=""> </a>
+ </li>
+ </tal:layouts>
+ </tal:contextViewsSelection>
+
+ </tal:displayMenu>
+ </metal:display>
+
+ </body>
+</html>
\ No newline at end of file
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_edit.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_edit.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,22 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
+ lang="en-US"
+ metal:use-macro="here/main_template/macros/master"
+ i18n:domain="PageBuilder">
+
+ <head><title></title></head>
+ <body>
+
+
+ <div metal:fill-slot="main">
+ <tal:block tal:define="editmode python: 1">
+
+ <!-- edit view of pagebuilder same as the view but with editmode=True-->
+
+ <div metal:use-macro="here/pagebuilder_view/macros/main" />
+
+ </tal:block>
+ </div>
+
+
+ </body>
+</html>
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_icon.gif
==============================================================================
Binary file. No diff available.
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_view.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagebuilder_view.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,105 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en"
+ metal:use-macro="here/main_template/macros/master"
+ i18n:domain="plone">
+
+<body>
+
+ <div metal:fill-slot="main">
+ <metal:main-macro define-macro="main">
+
+ <div id="pagebuilder">
+ <div metal:use-macro="here/document_actions/macros/document_actions">
+ Document actions (print, sendto etc)
+ </div>
+
+ <h1 tal:content="object_title" class="documentFirstHeading">
+ Title or id
+ </h1>
+
+ <a href=""
+ class="link-parent"
+ tal:define="parent_url python:here.navigationParent(here, template_id)"
+ tal:condition="parent_url"
+ tal:attributes="href parent_url"
+ i18n:translate="go_to_parent_url">
+ Up one level
+ </a>
+
+ <p class="documentDescription"
+ tal:content="here/Description"
+ tal:condition="here/Description">
+ Description
+ </p>
+
+ <tal:items repeat="object here/getFolderContents">
+ <div tal:define="base_template template/id;
+ base_url here/absolute_url;
+ layout python: here.getTargetObjectLayout(object.getObject());
+ template python: getattr(object, layout, None);
+ macros template/macros | nothing;
+ main_macro python: macros['main']"
+ tal:attributes="id here/getId">
+
+ <tal:content tal:define="batch_base_url string:${here/absolute_url}/${template_id};
+ here python: object.getObject();
+ ctype python: here.portal_type.lower();
+ context python: here;
+ here_url string:${here/absolute_url};
+ object_title here/Title">
+
+ <tal:edit define="actions python: here.portal_actions.listFilteredActionsFor(here)"
+ condition="editmode|nothing">
+
+ <div metal:use-macro="here/pagebuilder_contentviews/macros/content_views">
+ The content views (View, Edit, Properties, Workflow)
+ </div>
+
+ <div class="pagebuilder-toolbar">
+ <ul id="navlist">
+ <li class="utility">
+ <span>
+ <a tal:attributes="href string:${base_url}/reorderObject?position=down&id=${here/getId}">
+ <img tal:attributes="src string:${portal_url}/arrowDown.gif">
+ </a>
+ <a tal:attributes="href string:${base_url}/reorderObject?position=up&id=${here/getId}">
+ <img tal:attributes="src string:${portal_url}/arrowUp.gif">
+ </a>
+ </span>
+ </li>
+ <li><span>
+ <tal:index replace="repeat/object/number" />
+ <tal:type replace="here/portal_type" />
+ </span></li>
+ <li tal:attributes="class string:visualIcon utility contenttype-$ctype">
+ <a tal:attributes="href string:${here/absolute_url}/delete_confirmation">
+ <img tal:attributes="src string:${portal_url}/delete_icon.gif">
+ </a>
+ </li>
+ <li metal:use-macro="here/pagebuilder_contentviews/macros/content_menu_toolbar">
+ The content toolbar
+ </li>
+ <li class="separator" tal:condition="here/@@plone/isStructuralFolder">|</li>
+ <li metal:use-macro="here/pagebuilder_contentviews/macros/content_display_toolbar">
+ The display toolbar
+ </li>
+ </ul>
+ </div>
+ </tal:edit>
+
+ <div class="pagebuilder-object">
+ <tal:render metal:use-macro="main_macro" />
+ </div>
+ </tal:content>
+ </div>
+ <div metal:use-macro="here/document_relateditems/macros/relatedItems">
+ show related items if they exist
+ </div>
+ </tal:items>
+
+ </div>
+ </metal:main-macro>
+ </div>
+
+</body>
+</html>
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagerow_default_view.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagerow_default_view.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,34 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en"
+ metal:use-macro="here/main_template/macros/master"
+ i18n:domain="plone">
+
+<body>
+
+ <div metal:fill-slot="main">
+ <metal:main-macro define-macro="main">
+
+ <div tal:define="contents here/getFolderContents;
+ layout python: ('one-column', 'two-columns-equal', 'three-columns-equal')[len(contents)-1]"
+ tal:attributes="class string:pagebuilder-row $layout">
+
+ <h1 tal:content="object_title" class="documentFirstHeading">
+ Title or id
+ </h1>
+
+ <p class="documentDescription"
+ tal:content="here/Description"
+ tal:condition="here/Description">
+ Description
+ </p>
+
+ <metal:columns metal:use-macro="here/pagerow_macros/macros/columns" />
+
+ <div class="visualClear"><!-- nothing here --></div>
+
+ </div>
+ </metal:main-macro>
+ </div>
+
+</body>
+</html>
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeleft_view.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeleft_view.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,34 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en"
+ metal:use-macro="here/main_template/macros/master"
+ i18n:domain="plone">
+
+<body>
+
+ <div metal:fill-slot="main">
+ <metal:main-macro define-macro="main">
+
+ <div tal:define="contents here/getFolderContents;
+ layout python: ('one-column', 'two-columns-largeleft', 'three-columns-largeleft')[len(contents)-1]"
+ tal:attributes="class string:pagebuilder-row $layout">
+
+ <h1 tal:content="object_title" class="documentFirstHeading">
+ Title or id
+ </h1>
+
+ <p class="documentDescription"
+ tal:content="here/Description"
+ tal:condition="here/Description">
+ Description
+ </p>
+
+ <metal:columns metal:use-macro="here/pagerow_macros/macros/columns" />
+
+ <div class="visualClear"><!-- nothing here --></div>
+
+ </div>
+ </metal:main-macro>
+ </div>
+
+</body>
+</html>
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeright_view.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagerow_largeright_view.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,34 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en"
+ metal:use-macro="here/main_template/macros/master"
+ i18n:domain="plone">
+
+<body>
+
+ <div metal:fill-slot="main">
+ <metal:main-macro define-macro="main">
+
+ <div tal:define="contents here/getFolderContents;
+ layout python: ('one-column', 'two-columns-largeright', 'three-columns-largeright')[len(contents)-1]"
+ tal:attributes="class string:pagebuilder-row $layout">
+
+ <h1 tal:content="object_title" class="documentFirstHeading">
+ Title or id
+ </h1>
+
+ <p class="documentDescription"
+ tal:content="here/Description"
+ tal:condition="here/Description">
+ Description
+ </p>
+
+ <metal:columns metal:use-macro="here/pagerow_macros/macros/columns" />
+
+ <div class="visualClear"><!-- nothing here --></div>
+
+ </div>
+ </metal:main-macro>
+ </div>
+
+</body>
+</html>
Added: PageBuilder/branches/2.0/skins/PageBuilder/pagerow_macros.pt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/pagerow_macros.pt Fri Feb 9 23:16:30 2007
@@ -0,0 +1,51 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xml:lang="en"
+ lang="en"
+ i18n:domain="plone">
+
+<body>
+
+<div metal:define-macro="columns"
+ tal:omit-tag="">
+ <tal:items repeat="object contents">
+
+ <div tal:attributes="id string:block_${repeat/object/number}">
+
+ <div tal:define="base_template template/id;
+ base_url here/absolute_url;
+ instance python: object.getObject();
+ layout python: here.getTargetObjectLayout(instance);
+ template python: getattr(object, layout, None);
+ macros template/macros | nothing;
+ main_macro python: macros['main']"
+ tal:attributes="id here/getId">
+
+ <tal:content tal:define="batch_base_url string:${here/absolute_url}/${template_id};
+ here python: instance;
+ here_url string:${here/absolute_url};
+ object_title here/Title">
+
+
+ <div class="pagebuilder-object">
+ <tal:quick-edit condition="editmode|nothing">
+ <a tal:condition="python: user.has_role(['Owner', 'Reviewer', 'Manager'], context)"
+ class="pagebuilder-quickedit"
+ href="#" tal:attributes="href string:${instance/absolute_url}/edit;"
+ title="Rediger underside">
+ <img tal:attributes="src string:$portal_url/edit_icon.gif;
+ title string:${instance/title_or_id}"
+ width="16"
+ title="Edit object"/>
+ </a>
+ </tal:quick-edit>
+ <tal:render metal:use-macro="main_macro" />
+ </div>
+ </tal:content>
+
+ </div>
+ </div>
+ </tal:items>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Added: PageBuilder/branches/2.0/skins/PageBuilder/setViewTemplate.py
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/skins/PageBuilder/setViewTemplate.py Fri Feb 9 23:16:30 2007
@@ -0,0 +1,26 @@
+## Script (Python) "setViewTemplate"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=templateId
+##title=Set view template
+##
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFPlone import PloneMessageFactory as _
+
+INTERFACE = 'Products.CMFPlone.interfaces.BrowserDefault.ISelectableBrowserDefault'
+
+itool = getToolByName(context, 'portal_interface')
+
+# This should never happen, but let's be informative if it does
+if not itool.objectImplements(context, INTERFACE):
+ raise NotImplementedError, "Object does not support selecting layout templates"
+
+context.setLayout(templateId)
+
+context.plone_utils.addPortalMessage(_(u'View changed.'))
+
+context.REQUEST.RESPONSE.redirect(context.REQUEST['HTTP_REFERER'])
\ No newline at end of file
Added: PageBuilder/branches/2.0/version.txt
==============================================================================
--- (empty file)
+++ PageBuilder/branches/2.0/version.txt Fri Feb 9 23:16:30 2007
@@ -0,0 +1 @@
+SVN/unreleased (2.0) [1]
|