def traverse(tree, depth=1): ul = htmlutils.Tag('ul', classes={ 'nav', 'nav-pills', 'nav-stacked', 'depth-' + str(depth), }) yield ul.start() for page, children in tree: is_active = page.pk == calling_page.pk li = htmlutils.Tag('li') li.toggle_class('active', is_active) yield li.start() if is_active: yield htmlutils.tag('a', page.title, href='#') else: yield htmlutils.tag('a', page.title, href=page.url) if children: yield from traverse(children, depth=depth + 1) yield li.end() yield ul.end()
def test_toggle_class(self): tag = htmlutils.Tag('div') tag.toggle_class('active') self.assertEqual(tag.attrs(), ' class="active"') tag.toggle_class('active') self.assertEqual(tag.attrs(), '') tag.toggle_class('active', False) self.assertEqual(tag.attrs(), '') tag.toggle_class('active', True) tag.toggle_class('more') self.assertEqual(tag.attrs(), ' class="active more"') tag.toggle_class('active', False) self.assertEqual(tag.attrs(), ' class="more"')
def test_tag(self): tag = htmlutils.Tag('a', href='http://www.example.com/') self.assertEqual(tag.start(), '<a href="http://www.example.com/">') self.assertEqual(tag.end(), '</a>')
def test_no_attrs(self): tag = htmlutils.Tag('div') self.assertEqual(tag.start(), '<div>')
def test_data(self): tag = htmlutils.Tag('div') tag.data['item'] = '1' self.assertEqual(tag.attrs(), ' data-item="1"')
def test_classes(self): tag = htmlutils.Tag('div') tag.classes.add('active') tag.classes.add('more') self.assertEqual(tag.attrs(), ' class="active more"')
def test_attrs(self): tag = htmlutils.Tag('div') self.assertEqual(tag.attrs(attr='"<"'), ' attr=""<""')