Skip to content

Commit b46475f

Browse files
12rambaugabalafou
authored andcommitted
fix: rollback ref and Id changes (pydata#1438)
1 parent 402788f commit b46475f

File tree

1 file changed

+0
-90
lines changed

1 file changed

+0
-90
lines changed

src/pydata_sphinx_theme/translator.py

-90
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
"""A custom Sphinx HTML Translator for Bootstrap layout."""
22

33
import types
4-
from functools import partial
54

65
import sphinx
7-
from docutils.nodes import Element
86
from packaging.version import Version
97
from sphinx.application import Sphinx
108
from sphinx.ext.autosummary import autosummary_table
119
from sphinx.util import logging
1210

13-
from .utils import traverse_or_findall
14-
1511
logger = logging.getLogger(__name__)
1612

1713

@@ -63,92 +59,6 @@ def visit_table(self, node):
6359
tag = self.starttag(node, "table", CLASS=" ".join(classes), **atts)
6460
self.body.append(tag)
6561

66-
# NOTE: `visit_section`, `visit_desc_signature` & `visit_reference` are extended
67-
# here to resolve #1026 & #1207. There is an open issue with Sphinx to address this:
68-
# https://github.com/sphinx-doc/sphinx/issues/11208
69-
# If the issue is resolved within Sphinx, these methods can be removed.
70-
71-
def visit_section(self, node):
72-
"""Handle section nodes to replace dots with underscores.
73-
74-
This will modify the ``id`` of HTML ``<section>`` tags, where Python modules
75-
are documented. Replacing dots with underscores allows the tags to be recognized
76-
as navigation targets by ScrollSpy.
77-
"""
78-
if "ids" in node:
79-
node["ids"] = [id_.replace(".", "_") for id_ in node["ids"]]
80-
super().visit_section(node)
81-
82-
def visit_desc_signature(self, node):
83-
"""Handle function & method signature nodes to replace dots with underscores.
84-
85-
This will modify the ``id`` attribute of HTML ``<dt>`` & ``<dd>`` tags, where
86-
Python functions are documented. Replacing dots with underscores allows the tags
87-
to be recognized as navigation targets by ScrollSpy.
88-
"""
89-
if "ids" in node:
90-
ids = node["ids"]
91-
for i, id_ in enumerate(ids):
92-
ids[i] = id_.replace(".", "_")
93-
super().visit_desc_signature(node)
94-
95-
def visit_reference(self, node):
96-
"""Handle reference nodes to replace dots with underscores.
97-
98-
This will modify the ``href`` attribute of any internal HTML ``<a>`` tags, e.g.
99-
the sidebar navigation links.
100-
"""
101-
try:
102-
# We are only interested in internal anchor references
103-
internal, anchorname = node["internal"], node["anchorname"]
104-
if internal and anchorname.startswith("#") and "." in anchorname:
105-
# Get the root node of the current document
106-
document = self.builder.env.get_doctree(self.builder.current_docname)
107-
108-
# Get the target anchor ID
109-
target_id = anchorname.lstrip("#")
110-
sanitized_id = target_id.replace(".", "_")
111-
# Update the node `href`
112-
node["refuri"] = node["anchorname"] = "#" + sanitized_id
113-
114-
# Define a search condition to find the target node by ID
115-
def find_target(search_id, node):
116-
return (
117-
isinstance(node, Element)
118-
and ("ids" in node)
119-
and (search_id in node["ids"])
120-
)
121-
122-
# NOTE: Replacing with underscores creates the possibility for
123-
# conflicting references. Here we check for these and warn the
124-
# user if any are found.
125-
if any(
126-
traverse_or_findall(
127-
document, condition=partial(find_target, sanitized_id)
128-
)
129-
):
130-
logger.warning(
131-
f'Sanitized reference "{sanitized_id}" for "{target_id}" '
132-
"conflicts with an existing reference!"
133-
)
134-
135-
# Find nodes with the given ID (there should only be one)
136-
targets = traverse_or_findall(
137-
document, condition=partial(find_target, target_id)
138-
)
139-
# Replace dots with underscores in the target node ID
140-
for target in targets:
141-
# NOTE: By itself, modifying the target `ids` here seems to be
142-
# insufficient, however it helps ensure that the reference `refuri`
143-
# and target `ids` remain consistent during the build process
144-
target["ids"] = [
145-
sanitized_id if id_ == target_id else id_
146-
for id_ in target["ids"]
147-
]
148-
except KeyError:
149-
pass
150-
super().visit_reference(node)
151-
15262

15363
def setup_translators(app: Sphinx):
15464
"""Add bootstrap HTML functionality if we are using an HTML translator.

0 commit comments

Comments
 (0)