Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make icon links and link shortening optional #2109

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 22 additions & 18 deletions src/pydata_sphinx_theme/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,12 @@ def update_config(app):
)

# Validate icon links
if not isinstance(theme_options.get("icon_links", []), list):
raise ExtensionError(
"`icon_links` must be a list of dictionaries, you provided "
f"type {type(theme_options.get('icon_links'))}."
)
if theme_options.get("icon_links") is not None:
if not isinstance(theme_options.get("icon_links", []), list):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see why on current main, setting icon_links = Nonein yourconf.pywould cause an error here. But if you don't want icon links, why not just leaveicon_links` undefined? Genuinely curious if there's a reason you need this.

raise ExtensionError(
"`icon_links` must be a list of dictionaries, you provided "
f"type {type(theme_options.get('icon_links'))}."
)

# Set the anchor link default to be # if the user hasn't provided their own
if not utils.config_provided_by_user(app, "html_permalinks_icon"):
Expand Down Expand Up @@ -140,18 +141,19 @@ def update_config(app):
# Add extra icon links entries if there were shortcuts present
# TODO: Deprecate this at some point in the future?
icon_links = theme_options.get("icon_links", [])
for url, icon, name in shortcuts:
if theme_options.get(url):
# This defaults to an empty list so we can always insert
icon_links.insert(
0,
{
"url": theme_options.get(url),
"icon": icon,
"name": name,
"type": "fontawesome",
},
)
if icon_links is not None:
for url, icon, name in shortcuts:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question as above: the code on main is fine if icon_links is not defined, it only errors if you explicitly set icon_links=None in the html_theme_options dictionary of conf.py. So why do that?

if theme_options.get(url):
# This defaults to an empty list so we can always insert
icon_links.insert(
0,
{
"url": theme_options.get(url),
"icon": icon,
"name": name,
"type": "fontawesome",
},
)
theme_options["icon_links"] = icon_links

# Prepare the logo config dictionary
Expand Down Expand Up @@ -282,7 +284,9 @@ def setup(app: Sphinx) -> Dict[str, str]:

app.add_html_theme("pydata_sphinx_theme", str(theme_path))

app.add_post_transform(short_link.ShortenLinkTransform)
theme_options = utils.get_theme_options_dict(app)
if theme_options.get("shorten_urls") is True:
app.add_post_transform(short_link.ShortenLinkTransform)
Comment on lines +288 to +289
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for this change, you'll need to add shorten_urls to src/pydata_sphinx_theme/theme/pydata_sphinx_theme/theme.conf and give it a default value (probably True for backwards compatibility)


app.connect("builder-inited", translator.setup_translators)
app.connect("builder-inited", update_config)
Expand Down