[Checkins] SVN: z3c.form/trunk/ Added button widget.
Stephan Richter
srichter at cosmos.phy.tufts.edu
Fri Jul 6 09:44:43 EDT 2007
Log message for revision 77506:
Added button widget.
Changed:
U z3c.form/trunk/CHANGES.txt
A z3c.form/trunk/src/z3c/form/browser/button.py
A z3c.form/trunk/src/z3c/form/browser/button.txt
A z3c.form/trunk/src/z3c/form/browser/button.zcml
A z3c.form/trunk/src/z3c/form/browser/button_display.pt
A z3c.form/trunk/src/z3c/form/browser/button_input.pt
U z3c.form/trunk/src/z3c/form/browser/configure.zcml
U z3c.form/trunk/src/z3c/form/interfaces.py
-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt 2007-07-06 13:43:18 UTC (rev 77505)
+++ z3c.form/trunk/CHANGES.txt 2007-07-06 13:44:42 UTC (rev 77506)
@@ -5,6 +5,9 @@
Version 1.5.0 (??/??/2007)
-------------------------
+- Feature: Added button widget. While it is not very useful without
+ Javascript, it still belongs into this package for completion.
+
- Feature: All ``IFieldWidget`` instances that are also HTML element widgets
now declare an additional CSS class of the form "<fieldtype.lower()>-field".
Added: z3c.form/trunk/src/z3c/form/browser/button.py
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/button.py (rev 0)
+++ z3c.form/trunk/src/z3c/form/browser/button.py 2007-07-06 13:44:42 UTC (rev 77506)
@@ -0,0 +1,43 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Button Widget Implementation
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+import zope.component
+import zope.interface
+
+from z3c.form import interfaces, widget
+from z3c.form.widget import Widget, FieldWidget
+from z3c.form.browser import widget
+
+
+class ButtonWidget(widget.HTMLInputWidget, Widget):
+ """A simple button of a form."""
+ zope.interface.implementsOnly(interfaces.IButtonWidget)
+
+ klass = u'buttonWidget'
+
+ def update(self):
+ super(ButtonWidget, self).update()
+ widget.addFieldClass(self)
+
+
+ at zope.component.adapter(interfaces.IButton, interfaces.IFormLayer)
+ at zope.interface.implementer(interfaces.IFieldWidget)
+def ButtonFieldWidget(field, request):
+ button = FieldWidget(field, ButtonWidget(request))
+ button.value = field.title
+ return button
Property changes on: z3c.form/trunk/src/z3c/form/browser/button.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: z3c.form/trunk/src/z3c/form/browser/button.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/button.txt (rev 0)
+++ z3c.form/trunk/src/z3c/form/browser/button.txt 2007-07-06 13:44:42 UTC (rev 77506)
@@ -0,0 +1,71 @@
+=============
+Button Widget
+=============
+
+The button widget allows you to provide buttons whose actions are defined
+using Javascript scripts. The "button" type of the "INPUT" element is
+described here:
+
+http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#edef-INPUT
+
+As for all widgets, the button widget must provide the new ``IWidget``
+interface:
+
+ >>> from zope.interface.verify import verifyClass
+ >>> from z3c.form import interfaces
+ >>> from z3c.form.browser import button
+
+ >>> verifyClass(interfaces.IWidget, button.ButtonWidget)
+ True
+
+The widget can be instantiated only using the request:
+
+ >>> from z3c.form.testing import TestRequest
+ >>> request = TestRequest()
+
+ >>> widget = button.ButtonWidget(request)
+
+Before rendering the widget, one has to set the name and id of the widget:
+
+ >>> widget.id = 'widget.id'
+ >>> widget.name = 'widget.name'
+
+We also need to register the template for the widget:
+
+ >>> import zope.component
+ >>> from zope.pagetemplate.interfaces import IPageTemplate
+ >>> from z3c.form.testing import getPath
+ >>> from z3c.form.widget import WidgetTemplateFactory
+
+ >>> zope.component.provideAdapter(
+ ... WidgetTemplateFactory(getPath('button_input.pt'), 'text/html'),
+ ... (None, None, None, None, interfaces.IButtonWidget),
+ ... IPageTemplate, name=interfaces.INPUT_MODE)
+
+If we render the widget we get a simple input element:
+
+ >>> print widget.render()
+ <input type="button" id="widget.id" name="widget.name"
+ class="buttonWidget" />
+
+Setting a value for the widget effectively changes the button label:
+
+ >>> widget.value = 'Button'
+ >>> print widget.render()
+ <input type="button" id="widget.id" name="widget.name"
+ class="buttonWidget" value="Button" />
+
+
+Let's now make sure that we can extract user entered data from a widget:
+
+ >>> widget.request = TestRequest(form={'widget.name': 'button'})
+ >>> widget.update()
+ >>> widget.extract()
+ 'button'
+
+If nothing is found in the request, the default is returned:
+
+ >>> widget.request = TestRequest()
+ >>> widget.update()
+ >>> widget.extract()
+ <NOVALUE>
Property changes on: z3c.form/trunk/src/z3c/form/browser/button.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.form/trunk/src/z3c/form/browser/button.zcml
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/button.zcml (rev 0)
+++ z3c.form/trunk/src/z3c/form/browser/button.zcml 2007-07-06 13:44:42 UTC (rev 77506)
@@ -0,0 +1,20 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:z3c="http://namespaces.zope.org/z3c"
+ i18n_domain="z3c.form">
+
+ <z3c:widgetTemplate
+ mode="display"
+ widget="z3c.form.interfaces.IButtonWidget"
+ layer="z3c.form.interfaces.IFormLayer"
+ template="button_display.pt"
+ />
+
+ <z3c:widgetTemplate
+ mode="input"
+ widget="z3c.form.interfaces.IButtonWidget"
+ layer="z3c.form.interfaces.IFormLayer"
+ template="button_input.pt"
+ />
+
+</configure>
Property changes on: z3c.form/trunk/src/z3c/form/browser/button.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.form/trunk/src/z3c/form/browser/button_display.pt
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/button_display.pt (rev 0)
+++ z3c.form/trunk/src/z3c/form/browser/button_display.pt 2007-07-06 13:44:42 UTC (rev 77506)
@@ -0,0 +1,5 @@
+<input type="button" id="" name="" class="" value="" disabled="disabled"
+ tal:attributes="id view/id;
+ name view/name;
+ class view/klass;
+ value view/value" />
Property changes on: z3c.form/trunk/src/z3c/form/browser/button_display.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.form/trunk/src/z3c/form/browser/button_input.pt
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/button_input.pt (rev 0)
+++ z3c.form/trunk/src/z3c/form/browser/button_input.pt 2007-07-06 13:44:42 UTC (rev 77506)
@@ -0,0 +1,25 @@
+<input type="button" id="" name="" class="" value="" accesskey=""
+ tal:attributes="id view/id;
+ name view/name;
+ class view/klass;
+ 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" />
Property changes on: z3c.form/trunk/src/z3c/form/browser/button_input.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.form/trunk/src/z3c/form/browser/configure.zcml
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/configure.zcml 2007-07-06 13:43:18 UTC (rev 77505)
+++ z3c.form/trunk/src/z3c/form/browser/configure.zcml 2007-07-06 13:44:42 UTC (rev 77506)
@@ -3,6 +3,7 @@
xmlns:z3c="http://namespaces.zope.org/z3c"
i18n_domain="z3c.form">
+ <include file="button.zcml" />
<include file="checkbox.zcml" />
<include file="file.zcml" />
<include file="orderedselect.zcml" />
Modified: z3c.form/trunk/src/z3c/form/interfaces.py
===================================================================
--- z3c.form/trunk/src/z3c/form/interfaces.py 2007-07-06 13:43:18 UTC (rev 77505)
+++ z3c.form/trunk/src/z3c/form/interfaces.py 2007-07-06 13:44:42 UTC (rev 77506)
@@ -400,6 +400,9 @@
class ISubmitWidget(IWidget):
"""Submit widget."""
+class IButtonWidget(IWidget):
+ """Button widget."""
+
class ITextAreaWidget(IWidget):
"""Text widget."""
More information about the Checkins
mailing list