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.
self.state.nested_parse(self.content, self.content_offset, node)
return node.children
+class ToggleDirective(Directive):
+ has_content = True
+ option_spec = {'header': directives.unchanged}
+ optional_arguments = 1
+
+ def run(self):
+ node = nodes.container()
+ node['classes'].append('toggle-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)
+