def default_header_ordered_column_format(self, column_number, column_name, header_label): header_label = HTML(header_label, HTML.tag("span", class_="marker")) if column_name == "_numbered": column_name = "numbered" class_name = "c%s ordering %s %s" % (column_number, self.order_dir, column_name) return HTML.tag("td", header_label, class_=class_name)
def default_header_column_format(self, column_number, column_name, header_label): if column_name == "_numbered": column_name = "numbered" if column_name in self.exclude_ordering: class_name = "c%s %s" % (column_number, column_name) return HTML.tag("td", header_label, class_=class_name) else: header_label = HTML(header_label, HTML.tag("span", class_="marker")) class_name = "c%s ordering %s" % (column_number, column_name) return HTML.tag("td", header_label, class_=class_name)
def make_columns(self, i, record): columns = [] for col_num, column in enumerate(self.columns): if column in self.column_formats: r = self.column_formats[column](col_num + 1, self.calc_row_no(i, column), record) else: r = self.default_column_format(col_num + 1, self.calc_row_no(i, column), record, column) columns.append(r) return HTML(*columns)
def default_header_ordered_column_format(self, column_number, column_name, header_label): """Override of the ObjectGrid to use <th> and to add an icon that represents the sort order for the column. """ icon_direction = self.order_dir == 'asc' and 'up' or 'down' icon_class = 'icon-chevron-%s' % icon_direction icon_tag = HTML.tag("i", class_=icon_class) header_label = HTML(header_label, " ", icon_tag) if column_name == "_numbered": column_name = "numbered" class_name = "c%s ordering %s %s" % (column_number, self.order_dir, column_name) return HTML.tag("th", header_label, class_=class_name)
def default_header_column_format(self, column_number, column_name, header_label): """Override of the ObjectGrid to use <th> for header columns """ if column_name == "_numbered": column_name = "numbered" if column_name in self.exclude_ordering: class_name = "c%s %s" % (column_number, column_name) return HTML.tag("th", header_label, class_=class_name) else: header_label = HTML(header_label, HTML.tag("span", class_="marker")) class_name = "c%s ordering %s" % (column_number, column_name) return HTML.tag("th", header_label, class_=class_name)
def tidy_value(cls, value): # objeto exposto if isinstance(value, ExposedObject): name = getattr(value, 'nome', getattr(value, 'descricao', False)) ref = cls.tidy_label(value.__class__.__name__) + \ (" %s" % unicode(value.id)) + \ (u"" if not name else (u": %s" % name)) uri = getattr(value, 'uri', False) return link_to_if(uri, ref, uri) # listas elif isinstance(value, Iterable) and \ not isinstance(value, basestring) and \ not isinstance(value, dict): return ul(cls.tidy_value(item) for item in value) # dicionarios elif isinstance(value, dict): return HTML.dl(HTML(*[ HTML(*[HTML.dt(cls.tidy_label(k)), HTML.dd(cls.tidy_value(v))]) for k, v in value.items()] )) # datas elif isinstance(value, date): return value.strftime(u"%d/%m/%Y") # decimais (em geral, valores moeda) elif isinstance(value, Decimal): return u"R$ "+locale.format(u"%.02f",value, grouping=True, monetary=True) # booleanos elif isinstance(value, bool): return u"Verdadeiro" if value else u"Falso" # strings longas elif isinstance(value, unicode) and len(value) > 140: return format_paragraphs(value, preserve_lines=True) # caso geral else: uri = getattr(value, 'uri', False) return link_to_if(uri, value, uri)
def __html__(self): """ renders the grid """ records = [] #first render headers record headers = self.make_headers() r = self.default_header_record_format(headers) records.append(r) # now lets render the actual item grid for i, record in enumerate(self.itemlist): columns = self.make_columns(i, record) if hasattr(self, 'custom_record_format'): r = self.custom_record_format(i + 1, record, columns) else: r = self.default_record_format(i + 1, record, columns) records.append(r) return HTML(*records)
def error_flashes(self, name=None, **attrs): """ Renders errors as Foundation flash messages. If no errors present returns an empty string. `name` : errors for name. If **None** all errors will be rendered. """ if name is None: errors = self.all_errors() else: errors = self.errors_for(name) content = [ HTML.div(error, class_='alert-box alert', **attrs) for error in errors ] return HTML(*content)
def error_small(self, name, cols=None, **attrs): """ Renders the specified error next to a Foundation form control `name` : errors for name. """ errors = self.errors_for(name) if not errors: return '' content = [] for error in errors: content.append(HTML(error)) content.append(tags.BR) content = content[:-1] attrs = css_add_class(attrs, 'error') if cols: attrs = css_add_class(attrs, 'small-%d' % cols) return HTML.tag('small', *content, **attrs)
def __html__(self): """Override of the ObjectGrid to use a <thead> so that bootstrap renders the styles correctly """ records = [] # first render headers record headers = self.make_headers() r = self.default_header_record_format(headers) # Wrap the headers in a thead records.append(HTML.tag('thead', r)) # now lets render the actual item grid for i, record in enumerate(self.itemlist): columns = self.make_columns(i, record) if hasattr(self, 'custom_record_format'): r = self.custom_record_format(i + 1, record, columns) else: r = self.default_record_format(i + 1, record, columns) records.append(r) return HTML(*records)
def make_headers(self): header_columns = [] for i, column in enumerate(self.columns): # let"s generate header column contents label_text = "" if column in self.labels: label_text = self.labels[column] else: label_text = column.replace("_", " ").title() # handle non clickable columns if column in self.exclude_ordering: header = self.default_header_column_format( i + 1, column, label_text) # handle clickable columns else: header = self.generate_header_link(i + 1, column, label_text) header_columns.append(header) return HTML(*header_columns)