Skip to content

Commit 95e0311

Browse files
authored
MAINT: simpleify _generate_header_nav_before_dropdown (#1883)
don't rely on string replacement which should make things a bit safer in the long run. closes #1882
1 parent 09849cc commit 95e0311

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

src/pydata_sphinx_theme/toctree.py

+25-21
Original file line numberDiff line numberDiff line change
@@ -219,40 +219,44 @@ def _generate_header_nav_before_dropdown(
219219
links_data = _generate_nav_info()
220220

221221
links_html = []
222-
boilerplate = """
222+
links_dropdown = []
223+
boilerplate = dedent(
224+
"""
223225
<li class="{nav_item} {active}">
224226
<a class="{nav_link} nav-{ext_int}" href="{href}">
225227
{title}
226228
</a>
227229
</li>
228230
"""
231+
)
229232
nav_item = "nav-item"
230233
nav_link = "nav-link"
231-
for link in links_data:
234+
dropdown_item = "dropdown-item"
235+
for link in links_data[:n_links_before_dropdown]:
232236
links_html.append(
233-
dedent(
234-
boilerplate.format(
235-
active=" current active" if link.is_current else "",
236-
nav_link=nav_link,
237-
nav_item=nav_item,
238-
ext_int="external" if link.is_external else "internal",
239-
href=link.href,
240-
title=link.title,
241-
)
237+
boilerplate.format(
238+
active="current active" if link.is_current else "",
239+
nav_link=nav_link,
240+
nav_item=nav_item,
241+
ext_int="external" if link.is_external else "internal",
242+
href=link.href,
243+
title=link.title,
244+
)
245+
)
246+
for link in links_data[n_links_before_dropdown:]:
247+
links_dropdown.append(
248+
boilerplate.format(
249+
active="current active" if link.is_current else "",
250+
nav_link=nav_link + " " + dropdown_item,
251+
nav_item="",
252+
ext_int="external" if link.is_external else "internal",
253+
href=link.href,
254+
title=link.title,
242255
)
243256
)
244257

245258
# The first links will always be visible
246-
links_solo = links_html[:n_links_before_dropdown]
247-
out = "\n".join(links_solo)
248-
249-
# Wrap the final few header items in a "more" dropdown
250-
links_dropdown = [
251-
html.replace(nav_item, "").replace(nav_link, "nav-link dropdown-item")
252-
for html in links_html[n_links_before_dropdown:]
253-
]
254-
255-
return out, links_dropdown
259+
return "\n".join(links_html), links_dropdown
256260

257261
def generate_header_nav_html(
258262
n_links_before_dropdown: int = 5, dropdown_text: str = "More"

0 commit comments

Comments
 (0)