diff --git a/conf.py b/conf.py index 011233fc2..456974933 100644 --- a/conf.py +++ b/conf.py @@ -1,10 +1,12 @@ import re import os +import shutil import sys from pathlib import Path import docutils from pygments.lexers import JsonLexer, XmlLexer +from sphinx.ext import graphviz from sphinx.util import logging import sphinx @@ -156,6 +158,7 @@ else: extensions += [ 'autodoc_placeholder', ] +extensions.append('sphinx.ext.graphviz' if shutil.which('dot') else 'graphviz_placeholder') todo_include_todos = False diff --git a/extensions/graphviz_placeholder/__init__.py b/extensions/graphviz_placeholder/__init__.py new file mode 100644 index 000000000..130fb1269 --- /dev/null +++ b/extensions/graphviz_placeholder/__init__.py @@ -0,0 +1,25 @@ +from docutils.parsers.rst import Directive, directives +from docutils import nodes + + +class PlaceHolder(Directive): + """ Placeholder class for directives that must be skipped. """ + + has_content = True + + def run(self): + node = nodes.literal_block('graphviz', '') + node += nodes.Text( + f'{self.content[0]}\n' + '> Graph not rendered because `dot` is not installed' + ) + return [node] + + +def setup(app): + directives.register_directive('graphviz', PlaceHolder) + + return { + 'parallel_read_safe': True, + 'parallel_write_safe': True + } diff --git a/extensions/odoo_theme/static/style.scss b/extensions/odoo_theme/static/style.scss index fcef11a86..bb3294483 100644 --- a/extensions/odoo_theme/static/style.scss +++ b/extensions/odoo_theme/static/style.scss @@ -971,6 +971,13 @@ header.o_main_header { } } } + .graphviz { + overflow-x: auto; + white-space: nowrap; + img { + max-width: unset; + } + } } } //------------------------------------------------------------------------------