def test_tabs_with_sub_options(web_fixture): """A TabbedPanel can have Tabs that are each composed of multiple sub-options.""" web_fixture.request.query_string = 'tab=mult2' tabbed_panel = TabbedPanel(web_fixture.view) multi_tab = MultiTab(web_fixture.view, 'tab 1 name', 'multitab-main') multi_tab.add_tab(Tab(web_fixture.view, 'multi tab 1', 'mult1', P.factory(text='tab 1/1 content'))) multi_tab.add_tab(Tab(web_fixture.view, 'multi tab 2', 'mult2', P.factory(text='tab 1/2 content'))) tabbed_panel.add_tab(multi_tab) tester = WidgetTester(tabbed_panel) expected_html = \ '''<ul role="tablist" class="nav nav-tabs reahl-menu">'''\ '''<li class="dropdown nav-item">'''\ '''<a aria-haspopup="true" data-toggle="dropdown" href="/?open_item=tab+1+name&tab=mult2" role="button" class="active dropdown-toggle nav-link reahl-ajaxlink">tab 1 name</a>'''\ '''<div class="dropdown-menu">'''\ '''<a id="nav_tab_mult1_tab" aria-controls="tab_mult1" aria-selected="false" data-target="#tab_mult1" data-toggle="tab" href="/?tab=mult1" role="tab" class="dropdown-item">multi tab 1</a>'''\ '''<a id="nav_tab_mult2_tab" aria-controls="tab_mult2" aria-selected="true" data-target="#tab_mult2" data-toggle="tab" href="/?tab=mult2" role="tab" class="active dropdown-item">multi tab 2</a>'''\ '''</div>'''\ '''</li>'''\ '''</ul>'''\ '''<div class="tab-content">'''\ '''<div id="tab_mult1" aria-labelledby="nav_tab_mult1_tab" role="tabpanel" class="tab-pane"><p>tab 1/1 content</p></div>'''\ '''<div id="tab_mult2" aria-labelledby="nav_tab_mult2_tab" role="tabpanel" class="active tab-pane"><p>tab 1/2 content</p></div>'''\ '''</div>''' actual = tester.render_html() assert actual == expected_html
def tabs_with_sub_options(fixture): """A TabbedPanel can have Tabs that are each composed of multiple sub-options.""" fixture.request.query_string = 'tab=mult2' tabbed_panel = TabbedPanel(fixture.view) multi_tab = MultiTab(fixture.view, 'tab 1 name', 'multitab-main') multi_tab.add_tab( Tab(fixture.view, 'multi tab 1', 'mult1', P.factory(text='tab 1/1 content'))) multi_tab.add_tab( Tab(fixture.view, 'multi tab 2', 'mult2', P.factory(text='tab 1/2 content'))) tabbed_panel.add_tab(multi_tab) tester = WidgetTester(tabbed_panel) expected_html = \ '''<ul class="nav nav-tabs reahl-menu">'''\ '''<li class="dropdown nav-item">'''\ '''<a data-target="-" data-toggle="dropdown" href="/?open_item=tab+1+name&tab=mult2" class="active dropdown-toggle nav-link reahl-ajaxlink">tab 1 name<span class="caret"></span></a>'''\ '''<div class="dropdown-menu">'''\ '''<a data-target="#tab_mult1" data-toggle="tab" href="/?tab=mult1" class="dropdown-item">multi tab 1</a>'''\ '''<a data-target="#tab_mult2" data-toggle="tab" href="/?tab=mult2" class="active dropdown-item">multi tab 2</a>'''\ '''</div>'''\ '''</li>'''\ '''</ul>'''\ '''<div class="tab-content">'''\ '''<div id="tab_mult1" class="tab-pane"><p>tab 1/1 content</p></div>'''\ '''<div id="tab_mult2" class="active tab-pane"><p>tab 1/2 content</p></div>'''\ '''</div>''' actual = tester.render_html() vassert(actual == expected_html)
def assemble(self): home = self.define_view('/', title='Page 1') home.set_slot( 'main', P.factory( text='In this slot will be some main content for the view on /' )) home.set_slot('secondary', P.factory(text='Some secondary content related to /')) another = self.define_view('/page2', title='Page 2') another.set_slot( 'main', P.factory( text= 'This could, for example, be where a photo gallery shows a large photo.' )) another.set_slot( 'secondary', P.factory( text='Thumbnails will then sit on the side of the big photo.')) bookmarks = [home.as_bookmark(self), another.as_bookmark(self)] self.define_page(MyCustomPage, bookmarks)
def assemble(self): contents_layout = ColumnLayout( ('main', ResponsiveSize(lg=6))).with_slots() page_layout = PageLayout(contents_layout=contents_layout, document_layout=Container()) self.define_page(HTML5Page).use_layout(page_layout) comment = Comment() home = self.define_view('/', title='Page flow demo') home.set_slot('main', CommentForm.factory(comment)) thanks = self.define_view('/thanks', title='Thank you!') thanks_text = 'Thanks for submitting your comment' thanks.set_slot('main', P.factory(text=thanks_text)) none_submitted = self.define_view('/none', title='Nothing to say?') none_text = 'Mmm, you submitted an empty comment??' none_submitted.set_slot('main', P.factory(text=none_text)) self.define_transition(comment.events.submit, home, thanks, guard=Action(comment.contains_text)) self.define_transition(comment.events.submit, home, none_submitted, guard=Not(Action(comment.contains_text)))
def __init__(self, view): super(MyPage, self).__init__(view) tabbed_panel = self.body.add_child(TabbedPanel(view)) contents1 = P.factory(text='A paragraph to give content to the first tab.') tabbed_panel.add_tab(Tab(view, 'Tab 1', '1', contents1)) contents2 = P.factory(text='And another ... to give content to the second tab.') tabbed_panel.add_tab(Tab(view, 'Tab 2', '2', contents2)) contents3 = P.factory(text='Something else on the third tab.') tabbed_panel.add_tab(Tab(view, 'Tab 3', '3', contents3))
def __init__(self, view): super(PopulatedTabbedPanel, self).__init__(view) multi_tab = MultiTab(view, 'multitab name', 'multi-main') tab1 = Tab(view, 'tab 1 name', 'multi1', P.factory(text='tab 1/1 content')) tab2 = Tab(view, 'tab 2 name', 'multi2', P.factory(text='tab 1/2 content')) multi_tab.add_tab(tab1) multi_tab.add_tab(tab2) self.add_tab(multi_tab) tab3 = Tab(view, 'tab 3 name', 'tab3', P.factory(text='tab 3 content')) self.add_tab(tab3) tab4 = Tab(view, 'tab 4 name', 'tab4', P.factory(text='tab 4 content')) self.add_tab(tab4)
def test_default_active_tab(web_fixture, default_tab_scenarios): """The first tab is active by default (if the active tab is not indicated in the query_string).""" tab1 = Tab(web_fixture.view, 'tab 1 name', 'tab1', P.factory(text='tab 1 content')) tab2 = Tab(web_fixture.view, 'tab 2 name', 'tab2', P.factory(text='tab 2 content')) tabbed_panel = TabbedPanel(web_fixture.view) tabbed_panel.add_tab(tab1) tabbed_panel.add_tab(tab2) [menu_item1, menu_item2] = tabbed_panel.nav.menu_items assert menu_item1.is_active == default_tab_scenarios.tab1_active assert menu_item2.is_active == default_tab_scenarios.tab2_active tester = WidgetTester(tabbed_panel) panel_contents = tester.get_html_for('//div[@class="tab-content"]/div[contains(@class, "active")]/*') assert panel_contents == default_tab_scenarios.expected_contents
def assemble(self): contents_layout = ColumnLayout(ColumnOptions('main', ResponsiveSize())).with_slots() self.define_page(HTML5Page).use_layout(PageLayout(document_layout=Container(), contents_layout=contents_layout)) home = self.define_view('/', title='Layout demo') home.set_slot('main', CommentForm.factory()) header_text = lots_of('This text is located in the header,' 'which is added by the PageLayout. ') home.set_slot('header', P.factory(text=header_text)) footer_text = lots_of('The footer spans the bottom of all the ' 'columns on a PageLayout ') home.set_slot('footer', P.factory(text=footer_text))
def assemble(self): comment = Comment() home = self.define_view('/', title='Page flow demo') home.set_slot('main', CommentForm.factory(comment)) thanks = self.define_view('/thanks', title='Thank you!') thanks_text = 'Thanks for submitting your comment' thanks.set_slot('main', P.factory(text=thanks_text)) none_submitted = self.define_view('/none', title='Nothing to say?') none_text = 'Mmm, you submitted an empty comment??' none_submitted.set_slot('main', P.factory(text=none_text)) self.define_transition(comment.events.submit, home, thanks, guard=Action(comment.contains_text)) self.define_transition(comment.events.submit, home, none_submitted, guard=Not(Action(comment.contains_text)))
def assemble(self): contents_layout = ColumnLayout( ('secondary', ResponsiveSize(lg=4)), ('main', ResponsiveSize(lg=8))).with_slots() self.define_page(HTML5Page).use_layout( PageLayout(document_layout=Container(), contents_layout=contents_layout)) home = self.define_view('/', title='Layout demo') home.set_slot('main', CommentForm.factory()) secondary_text = lots_of('The secondary column sits on ' 'the left side of the main column, ' 'spanning 1/3 of the body. ') home.set_slot('secondary', P.factory(text=secondary_text)) header_text = lots_of('This text is located in the header,' 'which is added by the PageLayout. ') home.set_slot('header', P.factory(text=header_text)) footer_text = lots_of('The footer spans the bottom of all the ' 'columns on a PageLayout ') home.set_slot('footer', P.factory(text=footer_text))
def assemble(self): login_session = LoginSession.for_current_session() if login_session.current_user: user_name = login_session.current_user.name else: user_name = 'Guest' home = self.define_view('/', title='Home') home.set_slot('main', P.factory(text='Welcome %s' % user_name)) login_page = self.define_view('/login', title='Log in') login_page.set_slot('main', LoginForm.factory(login_session)) bookmarks = [i.as_bookmark(self) for i in [home, login_page]] self.define_page(MenuPage, bookmarks)
def assemble(self): login_session = LoginSession.for_current_session() if login_session.account: logged_in_as = login_session.account.email else: logged_in_as = 'Guest' home = self.define_view('/', title='Home') home.set_slot('main', P.factory(text='Welcome %s' % logged_in_as)) login_page = self.define_view('/login', title='Log in') login_page.set_slot('main', LoginForm.factory()) bookmarks = [i.as_bookmark(self) for i in [home, login_page]] self.define_page(MenuPage, bookmarks)
def assemble(self): login_session = LoginSession.for_current_session() if login_session.account: logged_in_as = login_session.account.email else: logged_in_as = 'Guest' home = self.define_view('/', title='Home') home.set_slot('main', P.factory(text='Welcome %s' % logged_in_as)) terms_of_service = self.define_view('/terms_of_service', title='Terms of service') terms_of_service.set_slot( 'main', LegalNotice.factory('The terms of services defined as ...', 'terms')) privacy_policy = self.define_view('/privacy_policy', title='Privacy policy') privacy_policy.set_slot( 'main', LegalNotice.factory('You have the right to remain silent ...', 'privacypolicy')) disclaimer = self.define_view('/disclaimer', title='Disclaimer') disclaimer.set_slot( 'main', LegalNotice.factory('Disclaim ourselves from negligence ...', 'disclaimer')) class LegalBookmarks: terms_bookmark = terms_of_service.as_bookmark(self) privacy_bookmark = privacy_policy.as_bookmark(self) disclaimer_bookmark = disclaimer.as_bookmark(self) accounts = self.define_user_interface('/accounts', AccountUI, {'main_slot': 'main'}, name='accounts', bookmarks=LegalBookmarks) account_bookmarks = [ accounts.get_bookmark(relative_path=relative_path) for relative_path in ['/login', '/register', '/registerHelp', '/verify'] ] bookmarks = [home.as_bookmark(self)] + account_bookmarks self.define_page(MenuPage, bookmarks)
def basic_rendering(fixture): """A TabbedPanel consists of a Nav (its tabs) and a Div in which tab contents are displayed.""" fixture.request.query_string = 'tab=tab1' tabbed_panel = TabbedPanel(fixture.view) tabbed_panel.add_tab( Tab(fixture.view, 'tab 1 name', 'tab1', P.factory(text='tab 1 content'))) tester = WidgetTester(tabbed_panel) expected_html = \ '''<ul class="nav nav-tabs reahl-menu">'''\ '''<li class="nav-item">'''\ '''<a data-target="#tab_tab1" data-toggle="tab" href="/?tab=tab1" class="active nav-link">tab 1 name</a>'''\ '''</li>'''\ '''</ul>'''\ '''<div class="tab-content">'''\ '''<div id="tab_tab1" class="active tab-pane"><p>tab 1 content</p></div>'''\ '''</div>'''\ actual = tester.render_html() vassert(actual == expected_html)
def test_basic_rendering(web_fixture): """A TabbedPanel consists of a Nav (its tabs) and a Div in which tab contents are displayed.""" web_fixture.request.query_string = 'tab=tab1' tabbed_panel = TabbedPanel(web_fixture.view) tabbed_panel.add_tab(Tab(web_fixture.view, 'tab 1 name', 'tab1', P.factory(text='tab 1 content'))) tester = WidgetTester(tabbed_panel) expected_html = \ '''<ul role="tablist" class="nav nav-tabs reahl-menu">'''\ '''<li class="nav-item">'''\ '''<a id="nav_tab_tab1_tab" aria-controls="tab_tab1" aria-selected="true" data-target="#tab_tab1" data-toggle="tab" href="/?tab=tab1" role="tab" class="active nav-link">tab 1 name</a>'''\ '''</li>'''\ '''</ul>'''\ '''<div class="tab-content">'''\ '''<div id="tab_tab1" aria-labelledby="nav_tab_tab1_tab" role="tabpanel" class="active tab-pane"><p>tab 1 content</p></div>'''\ '''</div>'''\ actual = tester.render_html() assert actual == expected_html