executablebooks / sphinx-design

A sphinx extension for designing beautiful, screen-size responsive web components.
https://sphinx-design.readthedocs.io/en/furo-theme/
MIT License
187 stars 57 forks source link

docutils hyperlink targets don't work for clickable cards #164

Open ngulden opened 10 months ago

ngulden commented 10 months ago

Describe the bug

Thanks for providing the sphinx-design extension. I use it together with Pydata Sphinx Theme to build a navigation page for our product documentation. See https://docs.software-univention.de/. I want to convert all cards there to clickable cards.

I want to use hyperlink targets as defined in docutils. My document supports several languages. Depending on the language, I include a different link.txt file. They have the same hyperlink name, but a different hyperlink target, depending on the language.

context

I want to use hyperlink targets for clickable cards:

.. grid-item-card:: some title
   :link: hyperlink-target-name_

Using

.. grid-item-card:: `some title <hyperlink-target-name_>`_

works. But then the card isn't clickable and just the title of the card. I want to whole card to be clickable with hyperlink targets.

expectation

I need the clickable card to render the link as defined in the hyperlink target.

bug

The link then just renders to http://$host/$path/hyperlink-target-name_ instead of the external link I want to have.

problem

This is a problem for people who have a document with different languages and need links depending on the language. The :link: option isn't part of the translation.

Reproduce the bug

  1. Create an empty Sphinx project and add the extensions pydata_sphinx_theme and sphinx_design to the conf.py.
  2. Create a file links-en.txt:
    .. _hyperlink-target: https://www.example.com
  3. Create a file links-de.txt:
    .. _hyperlink-target: https://www.example.de
  4. To your conf.py, add:
    
    rst_epilog = """
    .. include:: /links-en.txt
    """

def adapt_settings_to_translation(app, config): if config.language == "de": config.rst_epilog = """ .. include:: /links-de.txt """

def setup(app): app.connect("config-inited", adapt_settings_to_translation)

5. To you `index.rst` file add:

.. grid:: 4 .. grid-item-card:: Some title :link: hyperlink-target_


### List your environment

* Python 3.9.2

pydata-sphinx-theme==0.13.3 sphinx_design==0.5.0 Sphinx==5.0.0 docutils==0.17.1

welcome[bot] commented 10 months ago

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada: