# HG changeset patch
# User sylvain.thenault@logilab.fr
# Date 1239299917 -7200
# Node ID 92343a468e2af5e09fbeabcf589f6584dec0e81a
# Parent 9c7cc717bb1774833aadb5323be30811b72c1ac9
add some documentation, backport *CompletionWidget
diff -r 9c7cc717bb17 -r 92343a468e2a web/formwidgets.py
--- a/web/formwidgets.py Thu Apr 09 17:33:45 2009 +0200
+++ b/web/formwidgets.py Thu Apr 09 19:58:37 2009 +0200
@@ -11,14 +11,20 @@
from cubicweb.common import tags
from cubicweb.web import stdmsgs
+
class FieldWidget(object):
+ """abstract widget class"""
+ # javascript / css files required by the widget
needs_js = ()
needs_css = ()
+ # automatically set id and tabindex attributes ?
setdomid = True
settabindex = True
def __init__(self, attrs=None, setdomid=None, settabindex=None):
- self.attrs = attrs or {}
+ if attrs is None:
+ attrs = {}
+ self.attrs = attrs
if setdomid is not None:
# override class's default value
self.setdomid = setdomid
@@ -34,9 +40,14 @@
form.req.add_css(self.needs_css)
def render(self, form, field):
+ """render the widget for the given `field` of `form`.
+ To override in concrete class
+ """
raise NotImplementedError
def _render_attrs(self, form, field):
+ """return html tag name, attributes and a list of values for the field
+ """
name = form.context[field]['name']
values = form.context[field]['value']
if not isinstance(values, (tuple, list)):
@@ -50,9 +61,14 @@
class Input(FieldWidget):
+ """abstract widget class for tag based widgets"""
type = None
def render(self, form, field):
+ """render the widget for the given `field` of `form`.
+
+ Generate one tag for each field's value
+ """
self.add_media(form)
name, values, attrs = self._render_attrs(form, field)
inputs = [tags.input(name=name, value=value, type=self.type, **attrs)
@@ -60,11 +76,17 @@
return u'\n'.join(inputs)
+# basic html widgets ###########################################################
+
class TextInput(Input):
+ """"""
type = 'text'
class PasswordInput(Input):
+ """ and its confirmation field (using
+ -confirm as name)
+ """
type = 'password'
def render(self, form, field):
@@ -85,6 +107,7 @@
class FileInput(Input):
+ """"""
type = 'file'
def _render_attrs(self, form, field):
@@ -94,16 +117,23 @@
class HiddenInput(Input):
+ """"""
type = 'hidden'
setdomid = False # by default, don't set id attribute on hidden input
settabindex = False
class ButtonInput(Input):
+ """
+
+ if you want a global form button, look at the Button, SubmitButton,
+ ResetButton and ImgButton classes below.
+ """
type = 'button'
class TextArea(FieldWidget):
+ """