def __init__(self, view, address_book_ui): super().__init__(view) self.rows = QueryAsSequence(Session.query(Address).order_by( Address.id), map_function=lambda address: Row(address)) self.add_child(H(view, 1, text='Addresses')) def make_link_widget(view, row): return A.from_bookmark( view, address_book_ui.get_edit_bookmark(row.address, description='Edit')) columns = [ StaticColumn(Field(label='Name'), 'name', sort_key=Address.name), StaticColumn(EmailField(label='Email'), 'email_address', sort_key=Address.email_address), StaticColumn(IntegerField(label='Zip'), 'zip_code', sort_key=Address.zip_code), DynamicColumn('', make_link_widget) ] table_layout = TableLayout(striped=True) data_table = DataTable(view, columns, self.rows, caption_text='All my friends', summary='Summary for screen reader', table_layout=table_layout, css_id='address_data') self.add_child(data_table)
def __init__(self, view, address_book_ui): super(AddressBookPanel, self).__init__(view) self.rows = self.initialise_rows() self.add_child(H(view, 1, text='Addresses')) form = self.add_child(Form(view, 'address_table_form')) self.define_event_handler(self.events.delete_selected) def make_link_widget(view, row): return A.from_bookmark( view, address_book_ui.get_edit_bookmark(row.address, description='Edit')) def make_checkbox_widget(view, row): return PrimitiveCheckboxInput(form, row.fields.selected_by_user) def make_delete_selected_button(view): return Button(form, self.events.delete_selected) columns = [ StaticColumn(Field(label='Name'), 'name'), StaticColumn(EmailField(label='Email'), 'email_address'), DynamicColumn('', make_link_widget), DynamicColumn(make_delete_selected_button, make_checkbox_widget) ] table = Table(view, caption_text='All my friends', summary='Summary for screen reader') table.use_layout(TableLayout(striped=True)) table.with_data(columns, self.rows) form.add_child(table)
def table_layout_options(fixture): """TableLayout uses Bootstrap to implement many table layout options.""" for switched_on in [True, False]: layout = TableLayout(**fixture.layout_kwargs) Table(fixture.view).use_layout(layout) vassert( layout.widget.get_attribute('class') == 'table %s' % fixture.expected_css_class)
def test_table_layout_options(web_fixture, layout_scenarios): """TableLayout uses Bootstrap to implement many table layout options.""" layout = TableLayout(**layout_scenarios.layout_kwargs) Table(web_fixture.view).use_layout(layout) assert layout.widget.table.get_attribute( 'class') == layout_scenarios.expected_table_css_class if layout_scenarios.expected_main_css_class: assert layout.widget.html_representation.get_attribute( 'class') == layout_scenarios.expected_main_css_class
def layout_for_contained_table(fixture): """You can specify a Layout to use for the actual table inside the DataTable.""" layout = TableLayout() data_table = DataTable(fixture.view, fixture.columns, fixture.data, 'my_css_id', table_layout=layout) vassert(data_table.table.layout is layout)
def __init__(self, view): super(ScoringDataPanel, self).__init__(view) class Row(object): def __init__(self, request): self.request = request self.criteria = { i.label: i for i in self.request.get_criteria() } def does_criterion_apply(self, criterion): return self.criteria[criterion.label].applies def value_for(self, criterion): return self.criteria[criterion.label].score @property def score_total(self): return self.request.score_total @property def name(self): return self.request.name @property def surname(self): return self.request.surname def make_column_value(criterion, view, row): return TextNode( view, ('yes' if row.does_criterion_apply(criterion) else 'no')) def make_score_column_value(criterion, view, row): return TextNode(view, str(row.value_for(criterion))) columns = [] columns.append(StaticColumn(IntegerField(label='Name'), 'name')) columns.append(StaticColumn(IntegerField(label='Surname'), 'surname')) for i in FundingRequest().get_criteria(): columns.append( DynamicColumn(i.label, functools.partial(make_column_value, i))) columns.append( DynamicColumn('#', functools.partial(make_score_column_value, i))) columns.append(StaticColumn(IntegerField(label='Total'), 'score_total')) rows = [Row(i) for i in FundingRequest.find_requests()] table = self.add_child( Table(view, caption_text='Financial Aid Applications')) table.use_layout(TableLayout(responsive=True, striped=True)) table.with_data(columns, rows)
def test_layout_for_contained_table(web_fixture, data_table_fixture): """You can specify a Layout to use for the actual table inside the DataTable.""" layout = TableLayout( heading_theme='light' ) # heading_theme is here to give coverage of a previous bug data_table = DataTable(web_fixture.view, data_table_fixture.columns, data_table_fixture.data, 'my_css_id', table_layout=layout) assert data_table.table.layout is layout
def __init__(self, view): super(QualifyDataPanel, self).__init__(view) class QualifyDataRow(object): def __init__(self, request): self.request = request self.funding_items = { i.label: i for i in self.request.get_funding_items() } def qualifies_for_amount(self, funding_item): return self.funding_items[funding_item.label].qualified_amount @property def score_total(self): return self.request.score_total @property def qualify_total(self): return self.request.qualify_total @property def name(self): return self.request.name @property def surname(self): return self.request.surname def make_column_value(funding_item, view, row): return TextNode(view, str(row.qualifies_for_amount(funding_item))) columns = [] columns.append(StaticColumn(IntegerField(label='Name'), 'name')) columns.append(StaticColumn(IntegerField(label='Surname'), 'surname')) columns.append(StaticColumn(IntegerField(label='Score'), 'score_total')) for i in FundingRequest().get_funding_items(): columns.append( DynamicColumn(i.label, functools.partial(make_column_value, i))) columns.append( StaticColumn(IntegerField(label='Total'), 'qualify_total')) rows = [QualifyDataRow(i) for i in FundingRequest.find_requests()] table = self.add_child(Table(view, caption_text='Qualifying amounts')) table.use_layout(TableLayout(responsive=True, striped=True)) table.with_data(columns, rows)
def test_table_layout_header_options(web_fixture, layout_scenarios): """TableLayout can style a table header row.""" data = [DataItem(1, 'T'), DataItem(2, 'H'), DataItem(3, 'E')] column_definitions = [ StaticColumn(Field(label='Row Number'), 'row'), StaticColumn(Field(label='Alpha'), 'alpha') ] layout = TableLayout(heading_theme=layout_scenarios.theme) table = Table(web_fixture.view).with_data(column_definitions, data) table.use_layout(layout) if layout_scenarios.theme is not None: assert layout.widget.thead.get_attribute( 'class') == '%s' % layout_scenarios.expected_css_class else: assert not layout.widget.thead.has_attribute('class')
def __init__(self, view): super(AllFundRequestsPanel, self).__init__(view) funding_requests = FundingRequest.find_requests() def make_edit_link(view, funding_request): form = Form(view, 'edit_%s' % funding_request.id) form.add_child( Button( form, funding_request.events.edit.with_arguments( funding_request_id=funding_request.id))) return form columns = [ StaticColumn(field.unbound_copy(), field.name) for field in FundingRequest().fields.values() ] columns.append(DynamicColumn('', make_edit_link)) table = self.add_child( Table(view, caption_text='Financial Aid Applications')) table.use_layout(TableLayout(responsive=True, striped=True)) table.with_data(columns, funding_requests)