diff options
| author | Raphael Collet <rco@openerp.com> | 2014-08-22 17:51:20 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2014-08-22 17:51:20 +0200 |
| commit | 2ad092b5e54fa39a906b38d9240e08b9800ea0da (patch) | |
| tree | 1879c2a6efe8ed1626d92635870aaff922306492 /doc/_themes/odoodoc/sphinx_monkeypatch.py | |
| parent | 97256fa1fba6c7d3d02962b5948158d17852cf43 (diff) | |
[ADD] doc: new documentation, with training tutorials, and new scaffolding
Diffstat (limited to 'doc/_themes/odoodoc/sphinx_monkeypatch.py')
| -rw-r--r-- | doc/_themes/odoodoc/sphinx_monkeypatch.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/doc/_themes/odoodoc/sphinx_monkeypatch.py b/doc/_themes/odoodoc/sphinx_monkeypatch.py new file mode 100644 index 00000000000..60b8b115b66 --- /dev/null +++ b/doc/_themes/odoodoc/sphinx_monkeypatch.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +import sphinx.roles +import sphinx.environment +from sphinx.builders.html import StandaloneHTMLBuilder +from sphinx.writers.html import HTMLTranslator +from docutils.writers.html4css1 import HTMLTranslator as DocutilsTranslator + +def patch(): + # navify toctree (oh god) + @monkey(sphinx.environment.BuildEnvironment) + def resolve_toctree(old_resolve, self, *args, **kwargs): + """ If main_navbar, bootstrapify TOC to yield a navbar + + """ + main_navbar = kwargs.pop('main_navbar', False) + toc = old_resolve(self, *args, **kwargs) + if toc is None: + return None + + if main_navbar: + navbarify(toc[0]) + return toc + + @monkey(StandaloneHTMLBuilder) + def _get_local_toctree(old_local, self, *args, **kwargs): + """ _get_local_toctree generates a documentation toctree for the local + document (?), called from handle_page + """ + return old_local(self, *args, main_navbar=True, **kwargs) + + # monkeypatch visit_table to remove border and add .table + HTMLTranslator.visit_table = visit_table + # disable colspec crap + HTMLTranslator.write_colspecs = lambda self: None + # copy data- attributes straight from source to dest + HTMLTranslator.starttag = starttag_data + +def navbarify(node): + # add classes to toplevel + node['classes'].extend(['nav', 'navbar-nav', 'navbar-right']) + for list_item in node.children: + # bullet_list + # list_item + # compact_paragraph + # reference + # bullet_list + # list_item + # compact_paragraph + # reference + list_item['classes'].append('dropdown') + # list_item.compact_paragraph.reference + link = list_item.children[0].children[0] + link['classes'].append('dropdown-toggle') + link.attributes['data-toggle'] = 'dropdown' + # list_item.bullet_list + list_item.children[1]['classes'].append('dropdown-menu') + +def visit_table(self, node): + """ + * remove border + * add table class + """ + self._table_row_index = 0 + self.context.append(self.compact_p) + self.compact_p = True + classes = ' '.join({'table', self.settings.table_style}).strip() + self.body.append(self.starttag(node, 'table', CLASS=classes)) + +def starttag_data(self, node, tagname, suffix='\n', empty=False, **attributes): + attributes.update( + (k, v) for k, v in node.attributes.iteritems() + if k.startswith('data-') + ) + # oh dear + return DocutilsTranslator.starttag( + self, node, tagname, suffix=suffix, empty=empty, **attributes) + +class monkey(object): + def __init__(self, obj): + self.obj = obj + def __call__(self, fn): + name = fn.__name__ + old = getattr(self.obj, name) + setattr(self.obj, name, lambda self_, *args, **kwargs: \ + fn(old, self_, *args, **kwargs)) |
