X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3c0515e2912a7d05086b4a7cb138adc4779828d4..6c8dd229d394fdaf20facf604f7be86a5df1e368:/docs/source/_ext/showfile.py diff --git a/docs/source/_ext/showfile.py b/docs/source/_ext/showfile.py index f2623fb6db..06845d40ed 100644 --- a/docs/source/_ext/showfile.py +++ b/docs/source/_ext/showfile.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- +# Useful doc: https://www.sphinx-doc.org/en/master/extdev/markupapi.html +# Example: https://www.sphinx-doc.org/en/master/development/tutorials/recipe.html + import os from docutils.parsers.rst import Directive, directives from docutils import nodes @@ -7,6 +10,9 @@ from docutils.statemachine import StringList from sphinx.util.osutil import copyfile from sphinx.util import logging +CSS_FILE = 'showfile.css' +JS_FILE = 'showfile.js' + class ShowFileDirective(Directive): """ Show a file or propose it to download. @@ -15,7 +21,7 @@ class ShowFileDirective(Directive): has_content = False optional_arguments = 1 option_spec = { - 'language': directives.unchanged + 'language': directives.unchanged } def run(self): @@ -102,7 +108,57 @@ class ExampleTabDirective(Directive): self.state.nested_parse(self.content, self.content_offset, node) return node.children +class ToggleDirective(Directive): + has_content = True + option_spec = { + 'header': directives.unchanged, + 'show': directives.flag + } + optional_arguments = 1 + + def run(self): + node = nodes.container() + node['classes'].append('toggle-content') + if "show" not in self.options: + # This :show: thing is not working, and I fail to see why. + # Only the hidden-content class gets a call to hide() in the Javascript, + # and :show:n block# still get hidden when I load the page. + # No idea what's going on (Mt) + node['classes'].append('hidden-content') + + par = nodes.container() + par['classes'].append('toggle-header') + if self.arguments and self.arguments[0]: + par['classes'].append(self.arguments[0]) + + self.state.nested_parse(StringList([self.options["header"]]), self.content_offset, par) + self.state.nested_parse(self.content, self.content_offset, node) + + return [par, node] + +def add_assets(app): + app.add_stylesheet(CSS_FILE) + app.add_javascript(JS_FILE) + + +def copy_assets(app, exception): + if app.builder.name not in ['html', 'readthedocs'] or exception: + return + logger = logging.getLogger(__name__) + logger.info('Copying showfile stylesheet/javascript... ', nonl=True) + dest = os.path.join(app.builder.outdir, '_static', CSS_FILE) + source = os.path.join(os.path.abspath(os.path.dirname(__file__)), CSS_FILE) + copyfile(source, dest) + dest = os.path.join(app.builder.outdir, '_static', JS_FILE) + source = os.path.join(os.path.abspath(os.path.dirname(__file__)), JS_FILE) + copyfile(source, dest) + logger.info('done') + def setup(app): + app.add_directive('toggle-header', ToggleDirective) app.add_directive('showfile', ShowFileDirective) app.add_directive('example-tab', ExampleTabDirective) + app.connect('builder-inited', add_assets) + app.connect('build-finished', copy_assets) +