[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