[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