[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