Source code for sphinx_toolbox.tweaks.sphinx_panels_tabs

#!/usr/bin/env python3
#
#  sphinx_panels_tabs.py
"""
Tweak to :github:repo:`executablebooks/sphinx-tabs`
to fix a CSS conflict with :github:repo:`executablebooks/sphinx-panels`.

Fix for :github:issue:`51 <executablebooks/sphinx-panels>`.

.. versionadded:: 1.9.0
.. extensions:: sphinx_toolbox.tweaks.sphinx_panels_tabs

-----

"""  # noqa: D400
#
#  Copyright © 2021 Dominic Davis-Foster <dominic@davis-foster.co.uk>
#
#  Permission is hereby granted, free of charge, to any person obtaining a copy
#  of this software and associated documentation files (the "Software"), to deal
#  in the Software without restriction, including without limitation the rights
#  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#  copies of the Software, and to permit persons to whom the Software is
#  furnished to do so, subject to the following conditions:
#
#  The above copyright notice and this permission notice shall be included in all
#  copies or substantial portions of the Software.
#
#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
#  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
#  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
#  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
#  OR OTHER DEALINGS IN THE SOFTWARE.
#
#  Parts based on https://github.com/executablebooks/sphinx-panels
#  Copyright (c) 2020 Executable Books
#  MIT Licensed
#

# stdlib
from typing import Optional

# 3rd party
import dict2css
from docutils import nodes
from domdf_python_tools.paths import PathPlus
from sphinx.application import Sphinx
from sphinx.writers.html import HTMLTranslator

# this package
from sphinx_toolbox import _css
from sphinx_toolbox.utils import SphinxExtMetadata, metadata_add_version

__all__ = ("copy_asset_files", "setup")


def visit_container(self: HTMLTranslator, node: nodes.container) -> None:
	classes = "docutils container"
	if node.get("is_div", False):
		# we don't want the CSS for container for these nodes
		classes = "docutils"

	if any(c.startswith("sphinx-data-tab-") for c in node["classes"]):
		classes = "docutils"

	self.body.append(self.starttag(node, "div", CLASS=classes))


def depart_container(self: HTMLTranslator, node: nodes.Node) -> None:
	self.body.append("</div>\n")


[docs]def copy_asset_files(app: Sphinx, exception: Optional[Exception] = None) -> None: """ Copy asset files to the output. :param app: The Sphinx application. :param exception: Any exception which occurred and caused Sphinx to abort. .. versionchanged:: 2.7.0 Renamed from ``copy_assets``. The former name was kept as an alias until version 3.0.0 """ if exception: # pragma: no cover return if app.builder is None or app.builder.format.lower() != "html": # pragma: no cover return # style = StringList([ # ".docutils.container {", # " padding-left: 0 !important;", # " padding-right: 0 !important;", # '}', # '', # # "div.sphinx-tabs.docutils.container {", # # " padding-left: 0 !important;", # # " padding-right: 0 !important;", # # "}", # # '', # "div.ui.top.attached.tabular.menu.sphinx-menu.docutils.container {", # # " padding-left: 0 !important;", # # " padding-right: 0 !important;", # " margin-left: 0 !important;", # " margin-right: 0 !important;", # '}', # ]) css_static_dir = PathPlus(app.builder.outdir) / "_static" / "css" css_static_dir.maybe_make(parents=True) dict2css.dump(_css.tweaks_sphinx_panels_tabs_styles, css_static_dir / "tabs_customise.css")
[docs]@metadata_add_version def setup(app: Sphinx) -> SphinxExtMetadata: """ Setup :mod:`sphinx_toolbox.tweaks.sphinx_panels_tabs`. :param app: The Sphinx application. """ app.setup_extension("sphinx_tabs.tabs") app.setup_extension("sphinx_toolbox._css") app.add_node(nodes.container, override=True, html=(visit_container, depart_container)) return {"parallel_read_safe": True}