[Checkins] SVN: Sandbox/darrylcousins/mars.formdemo/ Updated
formdemo to work with martian-0.9.3 and using grok trunk
Darryl Cousins
darryl at darrylcousins.net.nz
Wed Feb 13 22:21:00 EST 2008
Log message for revision 83810:
Updated formdemo to work with martian-0.9.3 and using grok trunk
Changed:
U Sandbox/darrylcousins/mars.formdemo/buildout.cfg
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.txt
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/resources.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/application.zcml
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/browser/browser.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/layer.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/message/message.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.txt
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/skin/skin.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/candidate.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/spreadsheet.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/sqlmessage/sqlmessage.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/tests.py
A Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/pressme.png
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.py
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.txt
U Sandbox/darrylcousins/mars.formdemo/mars/formdemo/wizard/wizard.py
-=-
Modified: Sandbox/darrylcousins/mars.formdemo/buildout.cfg
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/buildout.cfg 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/buildout.cfg 2008-02-14 03:21:00 UTC (rev 83810)
@@ -1,6 +1,8 @@
[buildout]
develop = .
-parts = demo test
+parts =
+ demo
+ test
extends = http://download.zope.org/zope3.4/versions-3.4.0c1.cfg
versions = versions
@@ -8,6 +10,9 @@
grok = 0.12dev
martian = 0.9.3
+[zope3]
+location =
+
[test]
recipe = zc.recipe.testrunner
eggs = mars.formdemo [app, test]
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -1,5 +1,5 @@
import zope.component
-from zope.app.session.interfaces import ISession
+from zope.session.interfaces import ISession
from zope.app.container.interfaces import IContainer
from z3c.template.interfaces import ILayoutTemplate
@@ -18,12 +18,19 @@
import mars.adapter
from mars.formdemo.layer import IDemoBrowserLayer
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class DateSelectWidget(mars.adapter.AdapterFactory):
mars.adapter.factory(dateselect.DateSelectDataConverter)
+class DateSelectWidgetTemplate(mars.form.WidgetTemplateFactory):
+ #grok.name('input')
+ grok.context(zope.interface.Interface)
+ grok.template('dateselect.pt')
+ mars.form.widget(dateselect.DateSelectWidget)
+ grok.layer(IFormLayer)
+
class ContactLabel(mars.adapter.AdapterFactory):
grok.name('title')
mars.adapter.factory(button.StaticButtonActionAttribute(
@@ -118,9 +125,3 @@
grok.context(browser.EMailForm)
grok.template('email.pt')
-class DateSelectWidgetTemplate(mars.form.WidgetTemplateFactory):
- grok.context(zope.interface.Interface)
- grok.template('dateselect.pt')
- mars.form.widget(dateselect.DateSelectWidget)
- mars.layer.layer(IFormLayer)
-
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.txt
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.txt 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/addressbook.txt 2008-02-14 03:21:00 UTC (rev 83810)
@@ -13,14 +13,12 @@
>>> user = ExtendedTestBrowser()
>>> user.handleErrors = False
>>> user.addHeader('Accept-Language', 'en')
- >>> skinURL = 'http://localhost:8080/++skin++marsformdemo'
-
>>> user.open('http://localhost:8080')
Since all demos are purely public, there is no need to log in. Let's now click
on the "Address Book" link:
- >>> user.open(skinURL + '/addressbook')
+ >>> user.getLink('Address Book').click()
There is only one screen for this demo. In it you see the table of all
contacts on the left side and on the right side is the contact
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/resources.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/resources.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/addressbook/resources.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -10,7 +10,7 @@
from mars.formdemo.skin import skin
from mars.formdemo.addressbook.addressbook import AddressBook
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
## CSS resources
class AddressbookResource(mars.resource.ResourceFactory):
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/application.zcml
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/application.zcml 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/application.zcml 2008-02-14 03:21:00 UTC (rev 83810)
@@ -10,7 +10,7 @@
<include package="zope.app.publication" file="meta.zcml" />
<include package="zope.app.publisher" file="meta.zcml" />
<include package="zope.app.security" file="meta.zcml" />
- <include package="zope.app.securitypolicy" file="meta.zcml" />
+ <include package="zope.securitypolicy" file="meta.zcml" />
<include package="zope.rdb" file="meta.zcml" />
<include package="zope.viewlet" file="meta.zcml" />
@@ -23,7 +23,6 @@
<include package="grok" file="meta.zcml" />
- <include package="mars.layer" file="meta.zcml" />
<include package="mars.template" file="meta.zcml" />
<include package="mars.view" file="meta.zcml" />
<include package="mars.viewlet" file="meta.zcml" />
@@ -43,7 +42,7 @@
<include package="zope.app.i18n" />
<include package="zope.app.publication" />
<include package="zope.app.security" />
- <include package="zope.app.securitypolicy" />
+ <include package="zope.securitypolicy" />
<include package="zope.app.session" />
<include package="zope.app.twisted" />
<include package="zope.app.wsgi" />
@@ -74,7 +73,7 @@
<browser:defaultSkin name="marsformdemo" />
<securityPolicy
- component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+ component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
<role id="zope.Anonymous" title="Everybody" />
<grantAll role="zope.Anonymous" />
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/browser/browser.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/browser/browser.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/browser/browser.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -9,7 +9,7 @@
from mars.formdemo.layer import IDemoDivBrowserLayer
-mars.layer.layer(IDemoDivBrowserLayer)
+grok.layer(IDemoDivBrowserLayer)
class Index(mars.view.LayoutView):
"""`home` for formdemo"""
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/layer.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/layer.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/layer.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -1,8 +1,9 @@
__docformat__ = "reStructuredText"
+import grok
+
import mars.form
-import mars.layer
-class IDemoBrowserLayer(mars.layer.ILayer):
+class IDemoBrowserLayer(grok.IGrokLayer):
pass
class IDemoDivBrowserLayer(mars.form.IDivFormLayer, IDemoBrowserLayer):
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/message/message.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/message/message.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/message/message.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -20,7 +20,7 @@
import mars.adapter
from mars.formdemo.layer import IDemoBrowserLayer
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class DefaultDate(mars.adapter.AdapterFactory):
grok.name('default')
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -31,7 +31,7 @@
from mars.formdemo.layer import IDemoBrowserLayer
from mars.formdemo.skin import skin
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class Questionnaire(grok.Model):
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.txt
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.txt 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/questionnaire/questionnaire.txt 2008-02-14 03:21:00 UTC (rev 83810)
@@ -11,15 +11,13 @@
>>> from z3c.formdemo import testing
>>> from z3c.etestbrowser.testing import ExtendedTestBrowser
>>> user = ExtendedTestBrowser()
- >>> user.handleErrors = False
>>> user.addHeader('Accept-Language', 'en')
- >>> skinURL = 'http://localhost:8080/++skin++marsformdemo'
>>> user.open('http://localhost:8080')
Since all demos are purely public, there is no need to log in. Let's now click
on the "All widgets" link:
- >>> user.open(skinURL + '/questionnaireResults')
+ >>> user.getLink('Questionnaire').click()
The first screen you see is the questionnaire results screen.
@@ -38,12 +36,17 @@
>>> user.getControl('Name').value = u'Stephan Richter'
>>> user.getControl('Age').value = u'27'
- >>> user.getControl('yes', index=0).click()
- >>> user.getControl('no', index=1).click()
- >>> user.getControl('yes', index=2).click()
- >>> user.getControl('no', index=3).click()
+ >>> user.getControl(name='form.widgets.zope2:list')\
+ ... .getControl(value='true').click()
+ >>> user.getControl(name='form.widgets.plone:list')\
+ ... .getControl(value='false').click()
+ >>> user.getControl(name='form.widgets.zope3:list')\
+ ... .getControl(value='true').click()
+ >>> user.getControl(name='form.widgets.five:list')\
+ ... .getControl(value='false').click()
- >>> user.getControl('yes', index=4).click()
+ >>> user.getControl(name='form.widgets.contributor:list')\
+ ... .getControl(value='true').click()
>>> user.getControl('have you contributed').value = u'5'
>>> user.getControl('What is your Zope Id?').value = u'srichter'
@@ -52,12 +55,55 @@
Once the questionnaire has been submitted, the user is returned to the results
screen. Now the table has an entry:
- >>> testing.printElement(user, "//table/tbody/tr[1]/td/span/text()",
- ... multiple=True, serialize=False )
- Stephan Richter
- 27
- 5
- srichter
+ >>> testing.printElement(user, "//table/tbody/tr[1]")
+ <tr class="odd"><td class="sorted-on">
+ <span id="form-widgets-name"
+ class="text-widget required textline-field">
+ Stephan Richter
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-age" class="text-widget required int-field">
+ 27
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-zope2" class="radio-widget required bool-field">
+ <span class="selected-option">yes</span>
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-plone" class="radio-widget required bool-field">
+ <span class="selected-option">no</span>
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-zope3" class="radio-widget required bool-field">
+ <span class="selected-option">yes</span>
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-five" class="radio-widget required bool-field">
+ <span class="selected-option">no</span>
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-contributor"
+ class="radio-widget required bool-field">
+ <span class="selected-option">yes</span>
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-years" class="text-widget int-field">
+ 5
+ </span>
+ </td>
+ <td class="right">
+ <span id="form-widgets-zopeId" class="text-widget textline-field">
+ srichter
+ </span>
+ </td>
+ </tr>
Let's now fill out another questionnaire:
@@ -66,12 +112,17 @@
>>> user.getControl('Name').value = u'Roger Ineichen'
>>> user.getControl('Age').value = u'39'
- >>> user.getControl('yes', index=0).click()
- >>> user.getControl('yes', index=1).click()
- >>> user.getControl('yes', index=2).click()
- >>> user.getControl('no', index=3).click()
+ >>> user.getControl(name='form.widgets.zope2:list')\
+ ... .getControl(value='true').click()
+ >>> user.getControl(name='form.widgets.plone:list')\
+ ... .getControl(value='true').click()
+ >>> user.getControl(name='form.widgets.zope3:list')\
+ ... .getControl(value='true').click()
+ >>> user.getControl(name='form.widgets.five:list')\
+ ... .getControl(value='false').click()
- >>> user.getControl('yes', index=4).click()
+ >>> user.getControl(name='form.widgets.contributor:list')\
+ ... .getControl(value='true').click()
>>> user.getControl('have you contributed').value = u'4'
>>> user.getControl('What is your Zope Id?').value = u'projekt01'
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/skin/skin.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/skin/skin.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/skin/skin.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -15,15 +15,15 @@
IDemoDivBrowserLayer,
IDemoTableBrowserLayer)
-class MarsFormDemo(mars.layer.Skin):
+class MarsFormDemo(grok.Skin):
"""The ``marsformdemo`` browser skin."""
- mars.layer.layer(IDemoDivBrowserLayer)
+ grok.layer(IDemoDivBrowserLayer)
-class MarsTableFormDemo(mars.layer.Skin):
+class MarsTableFormDemo(grok.Skin):
"""The ``marstableformdemo`` browser skin."""
- mars.layer.layer(IDemoTableBrowserLayer)
+ grok.layer(IDemoTableBrowserLayer)
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class Template(mars.template.LayoutFactory):
"""main template for pages (note the context!)"""
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/candidate.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/candidate.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/candidate.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -15,7 +15,7 @@
from mars.formdemo.skin import skin
from mars.formdemo.spreadsheet.spreadsheet import Spreadsheet
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class Candidate(grok.Model):
zope.interface.implements(ICandidate)
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/spreadsheet.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/spreadsheet.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/spreadsheet/spreadsheet.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -1,6 +1,6 @@
__docformat__ = "reStructuredText"
import zope.interface
-from zope.app.session.interfaces import ISession
+from zope.session.interfaces import ISession
from z3c.form import button, field, form, interfaces
from z3c.formui import layout
from zc.table import table, column
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/sqlmessage/sqlmessage.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/sqlmessage/sqlmessage.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/sqlmessage/sqlmessage.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -31,16 +31,16 @@
from mars.formdemo.layer import IDemoBrowserLayer
from mars.formdemo.skin import skin
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
SESSION_KEY = 'mars.formdemo.sqlmessage'
-class DefaultDate(mars.adapter.AdapterFactory):
- grok.name('default')
- mars.adapter.factory(widget.ComputedWidgetAttribute(
- lambda adapter: datetime.date.today(),
- field=IHelloWorld['when'], view=IAddForm))
+#class DefaultDate(mars.adapter.AdapterFactory):
+# grok.name('default')
+# mars.adapter.factory(widget.ComputedWidgetAttribute(
+# lambda adapter: datetime.date.today(),
+# field=IHelloWorld['when'], view=IAddForm))
## CSS requirement
class MessageStyle(mars.resource.ResourceFactory):
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/tests.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/tests.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/tests.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -29,7 +29,3 @@
suite.layer = testing.FormDemoLayer
suites.append(suite)
return unittest.TestSuite(suites)
-
-
-if __name__ == '__main__':
- unittest.main(defaultTest='test_suite')
Added: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/pressme.png
===================================================================
(Binary files differ)
Property changes on: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/pressme.png
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -1,17 +1,20 @@
__docformat__ = "reStructuredText"
+import persistent
import zope.interface
import zope.schema
-import zope.annotation
-from zope.schema import fieldproperty
+from zope.annotation import factory
+from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.schema.fieldproperty import FieldProperty
from zope.traversing.browser import absoluteURL
from zope.app.folder.interfaces import IFolder
from zope.viewlet.viewlet import CSSViewlet
-from z3c.form import form, field
+from z3c.form import button, form, field
+from z3c.form.browser import checkbox
from z3c.form.interfaces import IWidgets
from z3c.form.interfaces import HIDDEN_MODE
from z3c.template.interfaces import ILayoutTemplate
-from z3c.formdemo.widgets.interfaces import IAllFields
+from z3c.formdemo.widgets import interfaces
import grok
@@ -23,57 +26,74 @@
from mars.formdemo.layer import IDemoBrowserLayer
from mars.formdemo.skin import skin
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class AllFields(grok.Annotation):
"""Register me as an annotation adapter"""
grok.context(zope.interface.Interface)
+ grok.provides(interfaces.IAllFields)
+ zope.interface.implements(interfaces.IAllFields)
+ zope.component.adapts(IAttributeAnnotatable)
- zope.interface.implements(IAllFields)
- zope.component.adapts(zope.annotation.interfaces.IAttributeAnnotatable)
+ asciiField = FieldProperty(interfaces.IAllFields['asciiField'])
+ asciiLineField = FieldProperty(interfaces.IAllFields['asciiLineField'])
+ boolField = FieldProperty(interfaces.IAllFields['boolField'])
+ checkboxBoolField = FieldProperty(
+ interfaces.IAllFields['checkboxBoolField'])
+ bytesField = FieldProperty(interfaces.IAllFields['bytesField'])
+ bytesLineField = FieldProperty(interfaces.IAllFields['bytesLineField'])
+ choiceField = FieldProperty(interfaces.IAllFields['choiceField'])
+ optionalChoiceField = FieldProperty(
+ interfaces.IAllFields['optionalChoiceField'])
+ promptChoiceField = FieldProperty(
+ interfaces.IAllFields['promptChoiceField'])
+ dateField = FieldProperty(interfaces.IAllFields['dateField'])
+ datetimeField = FieldProperty(interfaces.IAllFields['datetimeField'])
+ decimalField = FieldProperty(interfaces.IAllFields['decimalField'])
+ dictField = FieldProperty(interfaces.IAllFields['dictField'])
+ dottedNameField = FieldProperty(interfaces.IAllFields['dottedNameField'])
+ floatField = FieldProperty(interfaces.IAllFields['floatField'])
+ frozenSetField = FieldProperty(interfaces.IAllFields['frozenSetField'])
+ idField = FieldProperty(interfaces.IAllFields['idField'])
+ intField = FieldProperty(interfaces.IAllFields['intField'])
+ listField = FieldProperty(interfaces.IAllFields['listField'])
+ objectField = FieldProperty(interfaces.IAllFields['objectField'])
+ passwordField = FieldProperty(interfaces.IAllFields['passwordField'])
+ setField = FieldProperty(interfaces.IAllFields['setField'])
+ sourceTextField = FieldProperty(interfaces.IAllFields['sourceTextField'])
+ textField = FieldProperty(interfaces.IAllFields['textField'])
+ textLineField = FieldProperty(interfaces.IAllFields['textLineField'])
+ timeField = FieldProperty(interfaces.IAllFields['timeField'])
+ timedeltaField = FieldProperty(interfaces.IAllFields['timedeltaField'])
+ tupleField = FieldProperty(interfaces.IAllFields['tupleField'])
+ uriField = FieldProperty(interfaces.IAllFields['uriField'])
+ hiddenField = FieldProperty(interfaces.IAllFields['hiddenField'])
- asciiField = fieldproperty.FieldProperty(IAllFields['asciiField'])
- asciiLineField = fieldproperty.FieldProperty(IAllFields['asciiLineField'])
- boolField = fieldproperty.FieldProperty(IAllFields['boolField'])
- bytesField = fieldproperty.FieldProperty(IAllFields['bytesField'])
- bytesLineField = fieldproperty.FieldProperty(IAllFields['bytesLineField'])
- choiceField = fieldproperty.FieldProperty(IAllFields['choiceField'])
- optionalChoiceField = fieldproperty.FieldProperty(
- IAllFields['optionalChoiceField'])
- promptChoiceField = fieldproperty.FieldProperty(
- IAllFields['promptChoiceField'])
- dateField = fieldproperty.FieldProperty(IAllFields['dateField'])
- datetimeField = fieldproperty.FieldProperty(IAllFields['datetimeField'])
- decimalField = fieldproperty.FieldProperty(IAllFields['decimalField'])
- dictField = fieldproperty.FieldProperty(IAllFields['dictField'])
- dottedNameField = fieldproperty.FieldProperty(IAllFields['dottedNameField'])
- floatField = fieldproperty.FieldProperty(IAllFields['floatField'])
- frozenSetField = fieldproperty.FieldProperty(IAllFields['frozenSetField'])
- idField = fieldproperty.FieldProperty(IAllFields['idField'])
- intField = fieldproperty.FieldProperty(IAllFields['intField'])
- listField = fieldproperty.FieldProperty(IAllFields['listField'])
- objectField = fieldproperty.FieldProperty(IAllFields['objectField'])
- passwordField = fieldproperty.FieldProperty(IAllFields['passwordField'])
- setField = fieldproperty.FieldProperty(IAllFields['setField'])
- sourceTextField = fieldproperty.FieldProperty(IAllFields['sourceTextField'])
- textField = fieldproperty.FieldProperty(IAllFields['textField'])
- textLineField = fieldproperty.FieldProperty(IAllFields['textLineField'])
- timeField = fieldproperty.FieldProperty(IAllFields['timeField'])
- timedeltaField = fieldproperty.FieldProperty(IAllFields['timedeltaField'])
- tupleField = fieldproperty.FieldProperty(IAllFields['tupleField'])
- uriField = fieldproperty.FieldProperty(IAllFields['uriField'])
- hiddenField = fieldproperty.FieldProperty(IAllFields['hiddenField'])
-
-class AllFieldsForm(mars.view.PageletView, form.EditForm):
+#class AllFieldsForm(mars.view.PageletView, form.EditForm):
+class AllFieldsForm(mars.form.FormView, form.EditForm):
"""A form showing all fields."""
grok.name('widgets')
grok.context(zope.interface.Interface)
- fields = field.Fields(IAllFields).omit(
+
+ form.extends(form.EditForm)
+ fields = field.Fields(interfaces.IAllFields).omit(
'dictField', 'objectField')
+ fields['checkboxBoolField'].widgetFactory = \
+ checkbox.SingleCheckBoxFieldWidget
+
+ buttons = form.EditForm.buttons + \
+ button.Buttons(
+ button.ImageButton(name='pressme', image=u'pressme.png')
+ )
+
label = 'Widgets Demo'
+ @button.handler(buttons['pressme'])
+ def handlePressMe(self, action):
+ self.status = u'Press me was clicked!'
+
def getContent(self):
- return IAllFields(self.context)
+ return interfaces.IAllFields(self.context)
def updateWidgets(self):
self.widgets = zope.component.getMultiAdapter(
@@ -89,3 +109,8 @@
ILayoutTemplate)
return layout(self)
+# define an image resource
+class PressMe(mars.resource.ResourceFactory):
+ grok.name('pressme.png')
+ mars.resource.image('pressme.png')
+
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.txt
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.txt 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/widgets/widgets.txt 2008-02-14 03:21:00 UTC (rev 83810)
@@ -11,14 +11,14 @@
>>> from z3c.formdemo import testing
>>> from z3c.etestbrowser.testing import ExtendedTestBrowser
>>> user = ExtendedTestBrowser()
+ >>> user.handleErrors = False
>>> user.addHeader('Accept-Language', 'en')
- >>> user.handleErrors = False
- >>> skinURL = 'http://localhost:8080/++skin++marsformdemo'
+ >>> user.open('http://localhost:8080')
Since all demos are purely public, there is no need to log in. Let's now click
on the "All widgets" link:
- >>> user.open(skinURL + '/widgets')
+ >>> user.getLink('All widgets').click()
You are now in the widgets form. Let's now fill out all forms an submit the
form:
@@ -36,7 +36,8 @@
>>> user.getControl('ASCII', index=0).value += u' Add on.'
>>> user.getControl('ASCII Line').value += u' Add on.'
- >>> user.getControl('no', index=0).click() # Boolean
+ >>> user.getControl(name='form.widgets.boolField:list')\
+ ... .getControl(value='false').click() # Boolean
>>> user.getControl('Bytes', index=0).add_file(
... cStringIO.StringIO('File contents'), 'text/plain', 'test.txt')
>>> user.getControl('Bytes Line').value += u' Add on.'
@@ -47,7 +48,7 @@
>>> user.getControl('Date/Time').value = u'7/1/07 12:15 AM'
>>> user.getControl('Decimal').value = u'12439.986'
>>> user.getControl('Dotted Name').value += u'demo'
- >>> user.getControl('Float').value += u'12439.986'
+ >>> user.getControl('Float').value = u'12439.986'
>>> user.getControl('Frozen Set').getControl('One').click()
>>> user.getControl('Id').value += u'demo'
>>> user.getControl('Integer').value = u'12439'
@@ -63,10 +64,10 @@
>>> user.getControl('URI').value += u'/Documentation'
>>> user.getControl(name='form.widgets.hiddenField').value += u' Add on.'
- >>> user.getControl('Apply').click()
+ >>> user.getControl(name='form.buttons.apply').click()
Once submitted, the same form returns with a data changed method:
-
+
>>> from z3c.formdemo import testing
>>> testing.printElement(user, "//div[@class='summary']")
<div class="summary">Data successfully updated.</div>
@@ -77,7 +78,7 @@
>>> fields = interfaces.IAllFields(getRootFolder())
>>> fields.asciiField
- 'This is\n ASCII. Add on.'
+ 'This is\r\n ASCII. Add on.'
>>> fields.asciiLineField
'An ASCII line. Add on.'
>>> fields.boolField
@@ -101,7 +102,7 @@
>>> fields.dottedNameField
'z3c.formdemo'
>>> fields.floatField
- 12.811999999999999
+ 12439.986000000001
>>> fields.frozenSetField
frozenset([3])
>>> fields.idField
@@ -117,7 +118,7 @@
>>> fields.sourceTextField
u'<source /> Add on.'
>>> fields.textField
- u'Some\n Text. Add on.'
+ u'Some\r\n Text. Add on.'
>>> fields.textLineField
u'Some Text line. Add on.'
>>> fields.timeField
@@ -131,3 +132,9 @@
>>> fields.hiddenField
u'Some Hidden Text. Add on.'
+We also have an image button, that can be clicked:
+
+ >>> user.getControl(name='form.buttons.pressme').click()
+ >>> testing.printElement(user, "//div[@class='summary']")
+ <div class="summary">Press me was clicked!</div>
+
Modified: Sandbox/darrylcousins/mars.formdemo/mars/formdemo/wizard/wizard.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars/formdemo/wizard/wizard.py 2008-02-14 02:31:00 UTC (rev 83809)
+++ Sandbox/darrylcousins/mars.formdemo/mars/formdemo/wizard/wizard.py 2008-02-14 03:21:00 UTC (rev 83810)
@@ -3,7 +3,7 @@
import zope.interface
from zope.viewlet.viewlet import CSSViewlet
from zope.app.folder.interfaces import IFolder
-from zope.app.session.interfaces import ISession
+from zope.session.interfaces import ISession
from z3c.form import form, field, button
from z3c.formui import layout
@@ -19,7 +19,7 @@
from mars.formdemo.layer import IDemoBrowserLayer
from mars.formdemo.skin import skin
-mars.layer.layer(IDemoBrowserLayer)
+grok.layer(IDemoBrowserLayer)
class PersonWizard(mars.view.PageletView, Wizard):
grok.name('wizard')
More information about the Checkins
mailing list