Skip to content

Commit 402788f

Browse files
AlenkaFdrammock
authored andcommitted
Add dropdown_text argument to generate_header_nav_html (pydata#1423)
* Add dropdown_text argument to generate_header_nav_html * Add a test, fix typo in theme.conf and remove header_dropdown_text from docs/conf.py * fixed? --------- Co-authored-by: Daniel McCloy <[email protected]>
1 parent 0125510 commit 402788f

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

src/pydata_sphinx_theme/theme/pydata_sphinx_theme/components/navbar-nav.html

+1-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
{{ _("Site Navigation") }}
1313
</p>
1414
<ul class="bd-navbar-elements navbar-nav">
15-
{{ generate_header_nav_html(
16-
dropdown_id,
17-
n_links_before_dropdown=theme_header_links_before_dropdown) }}
15+
{{ generate_header_nav_html(n_links_before_dropdown=theme_header_links_before_dropdown, dropdown_text=theme_header_dropdown_text) }}
1816
</ul>
1917
</nav>

src/pydata_sphinx_theme/theme/pydata_sphinx_theme/theme.conf

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ show_nav_level = 1
3030
show_toc_level = 1
3131
navbar_align = content
3232
header_links_before_dropdown = 5
33+
header_dropdown_text = More
3334
switcher =
3435
check_switcher = True
3536
pygment_light_style = a11y-high-contrast-light

src/pydata_sphinx_theme/toctree.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from sphinx.addnodes import toctree as toctree_node
1414
from sphinx.application import Sphinx
1515
from sphinx.environment.adapters.toctree import TocTree
16+
from sphinx.locale import _
1617

1718
from .utils import traverse_or_findall
1819

@@ -54,7 +55,7 @@ def create_next_id(base_id: str):
5455

5556
@lru_cache(maxsize=None)
5657
def generate_header_nav_html(
57-
dropdown_id: str, n_links_before_dropdown: int = 5
58+
n_links_before_dropdown: int = 5, dropdown_text: str = "More"
5859
) -> str:
5960
"""Generate top-level links that are meant for the header navigation.
6061
@@ -72,6 +73,7 @@ def generate_header_nav_html(
7273
7374
Parameters:
7475
n_links_before_dropdown:The number of links to show before nesting the remaining links in a Dropdown element.
76+
dropdown_text:Text of the dropdown element button.
7577
"""
7678
try:
7779
n_links_before_dropdown = int(n_links_before_dropdown)
@@ -168,7 +170,7 @@ def generate_header_nav_html(
168170
out += f"""
169171
<li class="nav-item dropdown">
170172
<button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="{dropdown_id}">
171-
More
173+
{_(dropdown_text)}
172174
</button>
173175
<ul id="{dropdown_id}" class="dropdown-menu">
174176
{links_dropdown_html}

tests/test_build.py

+28
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,34 @@ def test_navbar_header_dropdown(sphinx_build_factory, n_links) -> None:
333333
assert standalone_links and not dropdowns
334334

335335

336+
@pytest.mark.parametrize("dropdown_text", (None, "Other")) # None -> default "More"
337+
def test_navbar_header_dropdown_button(sphinx_build_factory, dropdown_text) -> None:
338+
"""Test whether dropdown button text is configurable."""
339+
if dropdown_text:
340+
confoverrides = {
341+
"html_theme_options": {
342+
"header_links_before_dropdown": 2,
343+
"header_dropdown_text": dropdown_text,
344+
}
345+
}
346+
else:
347+
confoverrides = {
348+
"html_theme_options": {
349+
"header_links_before_dropdown": 2,
350+
}
351+
}
352+
sphinx_build = sphinx_build_factory("base", confoverrides=confoverrides).build()
353+
index_html = sphinx_build.html_tree("index.html")
354+
navbar = index_html.select("ul.bd-navbar-elements")[0]
355+
button_text = str(navbar.select("button")[0])
356+
if dropdown_text:
357+
# The dropdown text should be "Other"
358+
assert dropdown_text in button_text
359+
else:
360+
# The dropdown text should be "More"
361+
assert "More" in button_text
362+
363+
336364
def test_sidebars_captions(sphinx_build_factory, file_regression) -> None:
337365
"""Test that the captions are rendered."""
338366
sphinx_build = sphinx_build_factory("sidebars").build()

0 commit comments

Comments
 (0)