============= Image Widget ============= The image widget allows you to submit a form to the server by clicking on an image. The "image" 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 image widget must provide the new ``IWidget`` interface: >>> from zope.interface.verify import verifyClass >>> from z3c.form import interfaces >>> from z3c.form.browser import image >>> verifyClass(interfaces.IWidget, image.ImageWidget) True The widget can be instantiated only using the request: >>> from z3c.form.testing import TestRequest >>> request = TestRequest() >>> widget = image.ImageWidget(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('image_input.pt'), 'text/html'), ... (None, None, None, None, interfaces.IImageWidget), ... IPageTemplate, name=interfaces.INPUT_MODE) If we render the widget we get a simple input element: >>> print widget.render() Setting an image source for the widget effectively changes the "src" attribute: >>> widget.src = u'widget.png' >>> print widget.render() Let's now make sure that we can extract user entered data from a widget: >>> widget.request = TestRequest( ... form={'widget.name.x': '10', ... 'widget.name.y': '20', ... 'widget.name': 'value'}) >>> widget.update() >>> sorted(widget.extract().items()) [('value', 'value'), ('x', 10), ('y', 20)] If nothing is found in the request, the default is returned: >>> widget.request = TestRequest() >>> widget.update() >>> widget.extract()