summaryrefslogtreecommitdiff
path: root/doc/_themes/odoodoc/sphinx_monkeypatch.py
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2014-08-22 17:51:20 +0200
committerRaphael Collet <rco@openerp.com>2014-08-22 17:51:20 +0200
commit2ad092b5e54fa39a906b38d9240e08b9800ea0da (patch)
tree1879c2a6efe8ed1626d92635870aaff922306492 /doc/_themes/odoodoc/sphinx_monkeypatch.py
parent97256fa1fba6c7d3d02962b5948158d17852cf43 (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.py85
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))