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): + """