Beispiel #1
0
 def textfield(self, name, value=None, **kw):
     kwargs = dict(name=name, type='text')
     if value is not None:
         kwargs['value'] = value
         kwargs['size'] = '%d' % len(value)
     kwargs.update(kw)
     return markup.input(None, **kwargs)
Beispiel #2
0
    def checkboxes(self, name, items, checked=set()):
        retval = []
        checked = set(checked)
        for item in items:
            kw = { 'name': name, 'value': item, 'type': 'checkbox' }
            if item in checked:
                kw['checked'] = 'checked'

            # XXX hacky;  ideally, one would use a list with no bullets
            retval.append('%s%s<br/>' % (markup.input(None, **kw), item))
            
        return '\n'.join(retval)
Beispiel #3
0
    def __call__(self, errors=None):
        """render the form"""
        retval = StringIO()
        print >> retval

        def name_field(element):
            if not element['name']:
                return ''
            title={}
            help = element.get('help')
            if help:
                title['title'] = help
            return markup.span(markup.strong('%s:' % element['name']), **title)

        # print the form as a table
        table = [ [ name_field(element), element['html'] ]
                  for element in self.elements ]
        if errors:
            for row, element in zip(table, self.elements):
                error = errors.get(element['name'], '')
                if error:
                    if not isinstance(error, basestring):
                        if len(error) == 1:
                            error = error[0]
                        else:
                            error = markup.listify(error)
                    error = markup.div(error, **{ 'class': 'error' })
                row.append(error)
            
        print >> retval, markup.tablify(table)
        print >> retval, self.post_html

        # each form has a submit button
        # XXX this should probably be more customizable
        print >> retval, markup.input(None, type='submit', name='submit',
                                      value=self.submit),

        args = { 'method': self.method,
                 'enctype': 'multipart/form-data'}
        if self.action is not None:
            args['action'] = self.action
        return markup.form(retval.getvalue(), **args)
Beispiel #4
0
    def radiobuttons(self, name, items, checked=None, joiner='<br/>'):
        if checked is None:
            checked = items[0]
        joiner = "%s\n" % joiner
        retval = []
        for item in items:
            title = None
            if hasattr(item, '__iter__'):
                item, title = item
            kw = dict(type='radio', name=name, value=item)
            if item == checked:
                kw['checked'] = None

            # display contextual help
            if title:
                title = dict(title=title)
            else:
                title = {}
                
            retval.append(markup.span('%s%s' % (item, markup.input(**kw)),
                          **title))
            
        return joiner.join(retval)
Beispiel #5
0
 def file_upload(self, name):
     return markup.input(None, type='file', name=name)
Beispiel #6
0
 def hidden(self, name, value):
     return markup.input(None, type='hidden', name=name, value=value)
Beispiel #7
0
 def password(self, name):
     return markup.input(None, type='password', name=name)