def render_table(self, w, actions, paginate): view = self.view divid = view.domid if divid is not None: w(u'<div id="%s">' % divid) else: assert not (actions or paginate) nav_html = UStringIO() if paginate: view.paginate(w=nav_html.write, show_all_option=self.show_all_option) w(nav_html.getvalue()) if actions and self.display_actions == 'top': self.render_actions(w, actions) colrenderers = view.build_column_renderers() attrs = self.table_attributes() w(u'<table %s>' % sgml_attributes(attrs)) if self.view.has_headers: self.render_table_headers(w, colrenderers) self.render_table_body(w, colrenderers) w(u'</table>') if actions and self.display_actions == 'bottom': self.render_actions(w, actions) w(nav_html.getvalue()) if divid is not None: w(u'</div>')
def render_cell(self, w, rownum, colnum, renderer): attrs = self.cell_attributes(rownum, colnum, renderer) if colnum in self.header_column_idx: tag = u'th' else: tag = u'td' w(u'<%s %s>' % (tag, sgml_attributes(attrs))) renderer.render_cell(w, rownum) w(u'</%s>' % tag)
def select(name, id=None, multiple=False, options=[], **attrs): if multiple: attrs['multiple'] = 'multiple' if id: attrs['id'] = id attrs['name'] = name html = [u'<select %s>' % sgml_attributes(attrs)] html += options html.append(u'</select>') return u'\n'.join(html)
def close_form(self, form, values): """seems dumb but important for consistency w/ close form, and necessary for form renderers overriding open_form to use something else or more than and <form> """ out = u'</form>' if form.cwtarget: attrs = {'name': form.cwtarget, 'id': form.cwtarget, 'width': '0px', 'height': '0px', 'src': 'javascript: void(0);'} out = (u'<iframe %s></iframe>\n' % uilib.sgml_attributes(attrs)) + out return out
def open_form(self, form, values, **attrs): if form.needs_multipart: enctype = u'multipart/form-data' else: enctype = u'application/x-www-form-urlencoded' attrs.setdefault('enctype', enctype) attrs.setdefault('method', 'post') attrs.setdefault('action', form.form_action() or '#') if form.domid: attrs.setdefault('id', form.domid) if form.onsubmit: attrs.setdefault('onsubmit', form.onsubmit) if form.cssstyle: attrs.setdefault('style', form.cssstyle) if form.cssclass: attrs.setdefault('class', form.cssclass) if form.cwtarget: attrs.setdefault('target', form.cwtarget) if not form.autocomplete: attrs.setdefault('autocomplete', 'off') return '<form %s>' % uilib.sgml_attributes(attrs)
def _render(self, form, field, renderer): curvalues, attrs = self.values_and_attributes(form, field) options = [] optgroup_opened = False vocab = field.vocabulary(form) for option in vocab: try: label, value, oattrs = option except ValueError: label, value = option oattrs = {} if value is None: # handle separator if optgroup_opened: options.append(u'</optgroup>') oattrs.setdefault('label', label or '') options.append(u'<optgroup %s>' % uilib.sgml_attributes(oattrs)) optgroup_opened = True elif self.value_selected(value, curvalues): options.append( tags.option(label, value=value, selected='selected', **oattrs)) else: options.append(tags.option(label, value=value, **oattrs)) if optgroup_opened: options.append(u'</optgroup>') if 'size' not in attrs: if self._multiple: size = str(min(self.default_size, len(vocab) or 1)) else: size = u'1' attrs['size'] = size return tags.select(name=field.input_name(form, self.suffix), multiple=self._multiple, options=options, **attrs)
def render_row(self, w, rownum, renderers): attrs = self.row_attributes(rownum) w(u'<tr %s>' % sgml_attributes(attrs)) for colnum, renderer in enumerate(renderers): self.render_cell(w, rownum, colnum, renderer) w(u'</tr>\n')