def to_html(self): from itertools import groupby def _make(v, caption): v = safe_str(v) args = {'value': v} if isinstance(self.value, (tuple, list)) and v in [safe_str(x) for x in self.value]: args['selected'] = None elif v == safe_str(self.value): args['selected'] = None return str(Tag('option', safe_str(caption), **args)) s = [] #if the choices is 3-elements, then will do the group process group = False if self.choices: group = len(self.choices[0]) > 2 if group: for k, g in groupby(self.choices, lambda x:x[0]): s.append(begin_tag('optgroup', label=k)) for x in g: s.append(_make(x[1], x[2])) s.append(end_tag('optgroup')) else: for v, caption in self.choices: s.append(_make(v, caption)) args = self.kwargs.copy() if self.multiple: args['multiple'] = None args['size'] = self.size return str(Tag('select', '\n'.join(s), **args))
def unknown_begin(self, indent, v): name, value, kwargs = v func_name = 'begin_' + name if hasattr(self, func_name): return getattr(self, func_name)(indent, value, **kwargs) else: return indent*' ' + begin_tag(name, **kwargs)
def to_html(self): from itertools import groupby def _make(v, caption): v = safe_str(v) args = {'value': v} if isinstance(self.value, (tuple, list)) and v in [safe_str(x) for x in self.value]: args['selected'] = None elif v == safe_str(self.value): args['selected'] = None return str(Tag('option', safe_str(caption), **args)) s = [] #if the choices is 3-elements, then will do the group process group = False if self.choices: group = len(self.choices[0]) > 2 if group: for k, g in groupby(self.choices, lambda x:x[0]): s.append(begin_tag('optgroup', label=k)) for x in g: s.append(_make(x[1], x[2])) s.append(end_tag('optgroup')) else: for v, caption in self.choices: s.append(_make(v, caption)) args = self.kwargs.copy() if self.multiple: args['multiple'] = None args['size'] = self.size return str(Tag('select', '\n'.join(s), newline=True, **args))
def form_begin(self): args = self.html_attrs.copy() args['action'] = self.form_action args['method'] = self.form_method for field_name, field in self.fields.items(): if isinstance(field, FileField): args['enctype'] = "multipart/form-data" break return begin_tag('form', **args)
def do_td_field(self, indent, value, **kwargs): field_name = kwargs.pop('name', None) field = getattr(self.form, field_name) obj = self.form.fields[field_name] if 'label' in kwargs: label = kwargs.pop('label') else: label = obj.label if label: obj.label = label label_text = obj.get_label(_class='field') else: label_text = '' display = field.data or ' ' if 'width' not in kwargs: kwargs['width'] = 200 td = begin_tag('td', **kwargs) + u_str(display) + end_tag('td') return indent * ' ' + '<th align=right width=200>%s</th>%s' % (label_text, td)
def do_td_field(self, indent, value, **kwargs): field_name = kwargs.pop('name', None) field = getattr(self.form, field_name) obj = self.form.fields[field_name] if 'label' in kwargs: label = kwargs.pop('label') else: label = obj.label if label: obj.label = label label_text = obj.get_label(_class='field') else: label_text = '' display = field.data or ' ' if 'width' not in kwargs: kwargs['width'] = 200 td = begin_tag('td', **kwargs) + u_str(display) + end_tag('td') return indent * ' ' + '<th align=right width=200>%s</th>%s' % ( label_text, td)
def begin_buttons(self, indent, value, **kwargs): kwargs['_class'] = 'type-button' return indent * ' ' + begin_tag('div', **kwargs)
def begin_buttons(self, indent, value, **kwargs): kwargs['_class'] = 'form-actions' return indent * ' ' + begin_tag('div', **kwargs)