[Checkins] SVN: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ Checkpoint WidgetTemplate Grokker

Christian Klinger cklinger at novareto.de
Wed Jun 24 07:25:40 EDT 2009


Log message for revision 101257:
  Checkpoint WidgetTemplate Grokker

Changed:
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ftesting.zcml
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_string.pt
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/new_string.pt
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate_templates/
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate_templates/mylayout.pt

-=-
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py	2009-06-23 20:14:05 UTC (rev 101256)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -1,4 +1,6 @@
 #
 from components import Form, AddForm, EditForm, DisplayForm
 from components import PageForm, PageAddForm, PageEditForm, PageDisplayForm
+from components import WidgetTemplate
 from skin import FormLayer
+from directives import field

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py	2009-06-23 20:14:05 UTC (rev 101256)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -138,6 +138,9 @@
     
     martian.baseclass()
 
+
+# Page Forms
+
 class PageForm(PageGrokForm, form.Form, megrok.layout.Page):
     """Normal z3c form with megrok.layout support.
     """
@@ -175,3 +178,8 @@
     
     martian.baseclass()
 
+
+# Widgets
+
+class WidgetTemplate(object):
+    pass

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1,20 @@
+import martian
+from martian import validateInterfaceOrClass
+
+class field(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = None
+    # validate = validateInterfaceOrClass
+
+class mode(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = None
+    # validate = validateInterfaceOrClass
+
+class view(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = None
+    # validate = validateInterfaceOrClass

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ftesting.zcml
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ftesting.zcml	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ftesting.zcml	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1,38 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grok" />
+  <include package="grok" file="meta.zcml" />
+
+  <include package="megrok.z3cform" file="meta.zcml" />
+  <include package="megrok.z3cform" />
+
+  <grok:grok package="megrok.z3cform.tests" />
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      />
+
+  <unauthenticatedPrincipal
+      id="zope.anybody"
+      title="Unauthenticated User"
+      />
+  <grant
+      permission="zope.View"
+      principal="zope.anybody"
+      />
+
+  <principal
+      id="zope.mgr"
+      title="Manager"
+      login="mgr"
+      password="mgrpw"
+      />
+
+  <role id="zope.Manager" title="Site Manager" />
+  <grantAll role="zope.Manager" />
+  <grant role="zope.Manager" principal="zope.mgr" />
+
+</configure>
+

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py	2009-06-23 20:14:05 UTC (rev 101256)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -5,12 +5,16 @@
 import grokcore.view
 from grokcore.view.meta.views import ViewGrokker
 from grokcore.formlib.formlib import most_specialized_interfaces
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
+
 from martian.error import GrokError
 import martian
 
 from megrok.z3cform import components
+from megrok.z3cform import directives
 from z3c.form import field
+from z3c.form.zcml import widgetTemplateDirective
 
 def get_auto_fields(context):
     """Get the form fields for context.
@@ -52,3 +56,23 @@
 
         return True
 
+
+class WidgetTemplateGrokker(martian.ClassGrokker):
+    """ grokker for widget templates """
+    martian.component(components.WidgetTemplate)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.view.template)
+    martian.directive(directives.view)
+    martian.directive(directives.field)
+    martian.directive(directives.mode)
+
+    def grok(self, name, factory, module_info, **kw):
+        factory.module_info = module_info
+        return super(WidgetTemplateGrokker, self).grok(name, factory, module_info, **kw)
+
+    def execute(self, factory, config, context, layer, template, view, field, mode, **kw):
+        template_path = '/'.join(factory.module_info.path.split('/')[:-1])
+	template = "%s/%s" %(template_path, template)
+        widgetTemplateDirective(config, template, context, layer, view=view, field=field, mode=mode)  
+        return True

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_string.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_string.pt	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_string.pt	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1,36 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      tal:omit-tag="">
+    <span> Custom Widget </span>
+    <input id="" name="" class="" title="" lang="" disabled=""
+           readonly="" alt="" tabindex="" accesskey="" size="" maxlength=""
+           style="" value="" type="text"
+           tal:attributes="id view/id;
+                           name view/name;
+                           class view/klass;
+                           style view/style;
+                           title view/title;
+                           lang view/lang;
+                           onclick view/onclick;
+                           ondblclick view/ondblclick;
+                           onmousedown view/onmousedown;
+                           onmouseup view/onmouseup;
+                           onmouseover view/onmouseover;
+                           onmousemove view/onmousemove;
+                           onmouseout view/onmouseout;
+                           onkeypress view/onkeypress;
+                           onkeydown view/onkeydown;
+                           onkeyup view/onkeyup;
+                           value view/value;
+                           disabled view/disabled;
+                           tabindex view/tabindex;
+                           onfocus view/onfocus;
+                           onblur view/onblur;
+                           onchange view/onchange;
+                           readonly view/readonly;
+                           alt view/alt;
+                           accesskey view/accesskey;
+                           onselect view/onselect;
+                           size view/size;
+                           maxlength view/maxlength" />
+</html>

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/new_string.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/new_string.pt	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/new_string.pt	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1 @@
+    <span> Extra Widget </span>

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py	2009-06-23 20:14:05 UTC (rev 101256)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -13,14 +13,6 @@
   >>> [field.__name__ for field in view.fields.values()]
   ['name', 'age']
   
-
-  And on the display page:
-
-  >>> view = component.getMultiAdapter((manfred, request), name='index')
-  >>> len(view.fields)
-  2
-  >>> [field.__name__ for field in view.fields.values()]
-  ['name', 'age']
 """
 import grok
 

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1,98 @@
+"""
+  >>> manfred = Person()
+
+  >>> from zope import component
+  >>> from zope.interface import alsoProvides
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> alsoProvides(request, Skin)
+
+  Check that fields have been created on the edition page:
+
+  >>> view = component.getMultiAdapter((manfred, request), name='edit')
+  >>> len(view.fields)
+  2
+
+  >>> [field.__name__ for field in view.fields.values()]
+  ['name', 'age']
+
+  >>> view.updateWidgets() 
+  >>> print view.widgets['name'].render() 
+  <input id="form-widgets-name" name="form.widgets.name"
+         class="text-widget required textline-field"
+         value="" type="text" /> 
+
+  >>> view = component.getMultiAdapter((manfred, request), name='view')
+  >>> view.updateWidgets() 
+  >>> print view.widgets['name'].render()
+  <span> Extra Widget </span>
+
+
+  >>> view = component.getMultiAdapter((manfred, request), name='add')
+  >>> view.updateWidgets() 
+  >>> print view.widgets['name'].render()
+  <span> Extra Widget </span>
+"""
+
+import grok
+import megrok.layout
+
+from zope import interface, schema
+from zope.schema.fieldproperty import FieldProperty
+from megrok import z3cform
+
+from z3c.form import field, interfaces
+
+class Skin(z3cform.FormLayer):
+    grok.skin('skin')
+
+grok.layer(Skin)
+
+
+class IPerson(interface.Interface):
+    name = schema.TextLine(title=u"Name")
+    age = schema.Int(title=u"Age")
+
+
+class Person(grok.Model):
+    interface.implements(IPerson)
+
+    name = FieldProperty(IPerson['name'])
+    age = FieldProperty(IPerson['age'])
+
+
+class MyLayout(megrok.layout.Layout):
+    grok.context(Person)
+
+
+class CustomStringTemplate(z3cform.WidgetTemplate):
+    grok.context(Person)
+    grok.template('new_string.pt')
+    megrok.z3cform.directives.mode(interfaces.DISPLAY_MODE)
+
+class Edit(z3cform.PageEditForm):
+    grok.context(Person)
+    fields = field.Fields(IPerson)
+
+class View(z3cform.PageDisplayForm):
+    grok.context(Person)
+    fields = field.Fields(IPerson)
+
+class Add(z3cform.PageAddForm):
+    grok.context(Person)
+    fields = field.Fields(IPerson)
+
+class CustomTemplate(z3cform.WidgetTemplate):
+    grok.name('custom_template')
+    grok.context(Person)
+    grok.template('custom_string.pt')
+    megrok.z3cform.directives.view(interfaces.IAddForm)
+
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.z3cform.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite
+

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate_templates/mylayout.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate_templates/mylayout.pt	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate_templates/mylayout.pt	2009-06-24 11:25:39 UTC (rev 101257)
@@ -0,0 +1,8 @@
+<html>                                                                           
+ <body>
+   <div class="layout" tal:content="structure view/render">
+         here comes the content
+   </div>
+ </body>
+</html>
+



More information about the Checkins mailing list