[Checkins] SVN: plone.z3cform/trunk/plone/z3cform/ added support for chameleon templates with z3c.form if five.pt is present
David Glick
davidglick at onenw.org
Fri Jan 9 23:31:32 EST 2009
Log message for revision 94677:
added support for chameleon templates with z3c.form if five.pt is present
Changed:
U plone.z3cform/trunk/plone/z3cform/configure.zcml
U plone.z3cform/trunk/plone/z3cform/templates.py
U plone.z3cform/trunk/plone/z3cform/templates.zcml
-=-
Modified: plone.z3cform/trunk/plone/z3cform/configure.zcml
===================================================================
--- plone.z3cform/trunk/plone/z3cform/configure.zcml 2009-01-09 12:46:46 UTC (rev 94676)
+++ plone.z3cform/trunk/plone/z3cform/configure.zcml 2009-01-10 04:31:32 UTC (rev 94677)
@@ -5,6 +5,8 @@
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n_domain="plone.z3cform">
+ <include file="templates.zcml" />
+
<include package="z3c.form" file="meta.zcml" />
<include package="z3c.form" />
@@ -12,7 +14,6 @@
zcml:condition="not-installed z3c.form.browser.textlines"/>
<includeOverrides file="overrides.zcml" />
- <include file="templates.zcml" />
<adapter factory=".traversal.WidgetTraversal" name="widget" />
Modified: plone.z3cform/trunk/plone/z3cform/templates.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/templates.py 2009-01-09 12:46:46 UTC (rev 94676)
+++ plone.z3cform/trunk/plone/z3cform/templates.py 2009-01-10 04:31:32 UTC (rev 94677)
@@ -9,40 +9,71 @@
import zope.app.pagetemplate.viewpagetemplatefile
import z3c.form.interfaces
+from z3c.form import util
+from zope.pagetemplate.interfaces import IPageTemplate
from z3c.form.form import FormTemplateFactory
+from z3c.form.widget import WidgetTemplateFactory
try:
+ # chameleon-compatible page templates
from five.pt.pagetemplate import ViewPageTemplateFile
+ from five.pt.pagetemplate import ViewPageTemplateFile as ZopeTwoPageTemplateFile
except ImportError:
- from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+ # standard Zope page templates
+ from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile as ZopeTwoPageTemplateFile
+ from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
import plone.z3cform
import plone.z3cform.layout
path = lambda p: os.path.join(os.path.dirname(plone.z3cform.__file__), p)
-# Zope 2 land - the wrapper
+class FormTemplateFactory(FormTemplateFactory):
+ """Form template factory that maybe uses chameleon"""
+ def __init__(self, filename, contentType='text/html', form=None,
+ request=None):
+ self.template = ViewPageTemplateFile(filename, content_type=contentType)
+ zope.component.adapter(
+ util.getSpecification(form),
+ util.getSpecification(request))(self)
+ zope.interface.implementer(IPageTemplate)(self)
+z3c.form.form.FormTemplateFactory = FormTemplateFactory
+
class ZopeTwoFormTemplateFactory(FormTemplateFactory):
- """Form template factory for Zope 2 templates"""
+ """Form template factory for Zope 2 page templates"""
- def __init__(self, filename, contentType='text/html', form=None, request=None):
- super(ZopeTwoFormTemplateFactory, self).__init__(filename, contentType, form, request)
- self.template = ViewPageTemplateFile(filename, content_type=contentType)
+ def __init__(self, filename, contentType='text/html', form=None,
+ request=None):
+ self.template = ZopeTwoPageTemplateFile(filename, content_type=contentType)
+ zope.component.adapter(
+ util.getSpecification(form),
+ util.getSpecification(request))(self)
+ zope.interface.implementer(IPageTemplate)(self)
layout_factory = ZopeTwoFormTemplateFactory(
path('layout.pt'), form=plone.z3cform.interfaces.IFormWrapper)
-
-# Zope 3 land - the forms
-
form_factory = FormTemplateFactory(
path('form.pt'), form=z3c.form.interfaces.IForm)
subform_factory = FormTemplateFactory(
path('subform.pt'), form=z3c.form.interfaces.ISubForm)
+class ZopeTwoWidgetTemplateFactory(WidgetTemplateFactory):
+ def __init__(self, filename, contentType='text/html',
+ context=None, request=None, view=None,
+ field=None, widget=None):
+ self.template = ViewPageTemplateFile(filename, content_type=contentType)
+ zope.component.adapter(
+ util.getSpecification(context),
+ util.getSpecification(request),
+ util.getSpecification(view),
+ util.getSpecification(field),
+ util.getSpecification(widget))(self)
+ zope.interface.implementer(IPageTemplate)(self)
+z3c.form.widget.WidgetTemplateFactory = ZopeTwoWidgetTemplateFactory
+
class Macros(zope.publisher.browser.BrowserView):
- template = zope.app.pagetemplate.viewpagetemplatefile.ViewPageTemplateFile(
- 'macros.pt')
+ template = ViewPageTemplateFile('macros.pt')
def __getitem__(self, key):
return self.template.macros[key]
Modified: plone.z3cform/trunk/plone/z3cform/templates.zcml
===================================================================
--- plone.z3cform/trunk/plone/z3cform/templates.zcml 2009-01-09 12:46:46 UTC (rev 94676)
+++ plone.z3cform/trunk/plone/z3cform/templates.zcml 2009-01-10 04:31:32 UTC (rev 94677)
@@ -1,8 +1,14 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:zcml="http://namespaces.zope.org/zcml"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="plone.z3cform">
+ <!-- configure chameleon templates if available -->
+ <configure zcml:condition="installed five.pt">
+ <include package="five.pt"/>
+ </configure>
+
<browser:page
name="ploneform-macros"
for="*"
More information about the Checkins
mailing list