1 # -*- coding: utf-8 -*-
3 import sphinx.environment
4 from sphinx.writers.html import HTMLTranslator
5 from docutils.writers.html4css1 import HTMLTranslator as DocutilsTranslator
8 # navify toctree (oh god)
9 @monkey(sphinx.environment.BuildEnvironment)
10 def resolve_toctree(old_resolve, self, *args, **kwargs):
11 """ If navbar, bootstrapify TOC to yield a navbar
14 navbar = kwargs.pop('navbar', None)
15 toc = old_resolve(self, *args, **kwargs)
19 navbarify(toc[0], navbar=navbar)
22 # monkeypatch visit_table to remove border and add .table
23 HTMLTranslator.visit_table = visit_table
24 # disable colspec crap
25 HTMLTranslator.write_colspecs = lambda self: None
26 # copy data- attributes straight from source to dest
27 HTMLTranslator.starttag = starttag_data
29 def navbarify(node, navbar=None):
31 :param node: toctree node to navbarify
32 :param navbar: Whether this toctree is a 'main' navbar, a 'side' navbar or
36 for n in node.traverse():
37 if n.tagname == 'bullet_list':
38 n['classes'].append('nav')
39 elif navbar == 'main':
40 # add classes to just toplevel
41 node['classes'].extend(['nav', 'navbar-nav', 'navbar-right'])
42 for list_item in node.children:
51 list_item['classes'].append('dropdown')
52 # list_item.compact_paragraph.reference
53 link = list_item.children[0].children[0]
54 link['classes'].append('dropdown-toggle')
55 link.attributes['data-toggle'] = 'dropdown'
56 # list_item.bullet_list
57 list_item.children[1]['classes'].append('dropdown-menu')
59 def visit_table(self, node):
64 self._table_row_index = 0
65 self.context.append(self.compact_p)
67 classes = ' '.join({'table', self.settings.table_style}).strip()
68 self.body.append(self.starttag(node, 'table', CLASS=classes))
70 def starttag_data(self, node, tagname, suffix='\n', empty=False, **attributes):
72 (k, v) for k, v in node.attributes.iteritems()
73 if k.startswith('data-')
76 return DocutilsTranslator.starttag(
77 self, node, tagname, suffix=suffix, empty=empty, **attributes)
80 def __init__(self, obj):
82 def __call__(self, fn):
84 old = getattr(self.obj, name)
85 setattr(self.obj, name, lambda self_, *args, **kwargs: \
86 fn(old, self_, *args, **kwargs))