Skip to content

Conversation

@dheeraj12347
Copy link

Problem

Table of Contents (TOC) highlighting is not working correctly for some pages.

Root Cause

The URL comparison logic in toc_recursive_main.html and toc_recursive_dropdown.html was failing due to trailing slash differences between include.my_entry and entry.url.

Example:

  • include.my_entry: /docs/api/
  • entry.url: /docs/api

These look the same but don't match as strings.

Solution

Normalize both URLs before comparison by removing trailing slashes using Jekyll's remove filter.

Added:

{% assign normalized_my_entry = include.my_entry | remove: '/' %}
{% assign normalized_entry_url = entry.url | remove: '/' %}
## Solution
Normalize both URLs before comparison by removing trailing slashes using Jekyll's `remove` filter.

Added:
```liquid
{% assign normalized_my_entry = include.my_entry | remove: '/' %}
{% assign normalized_entry_url = entry.url | remove: '/' %}
Then compare:

text
{% if normalized_my_entry == normalized_entry_url %}
Files Changed
www/_includes/toc_recursive_main.html

www/_includes/toc_recursive_dropdown.html

Why This Works
Removes all / characters from both URLs before comparison

Makes the comparison consistent regardless of trailing slashes

Current page highlighting now works correctly

No JavaScript changes needed

@dheeraj12347
Copy link
Author

@GitToTheHub Thank you for the review! I've updated both files to use the cleaner single-line comparison as you suggested:

Changed from:
{% assign normalized_my_entry = include.my_entry | remove: '/' %}
{% assign normalized_entry_url = entry.url | remove: '/' %}
{% if normalized_my_entry == normalized_entry_url %}

To:
{% assign entry_active = include.my_entry | remove: '/' == entry.url | remove: '/' %}
{% if entry_active %}

This is much cleaner and more readable. Changes have been pushed. Thanks for the improvement suggestion!

@GitToTheHub
Copy link
Contributor

Very good :)

@GitToTheHub
Copy link
Contributor

@erisu Is this fine to merge?

@erisu
Copy link
Member

erisu commented Jan 20, 2026

Locally, the menu does not appear to be functioning as expected. Some elements seem duplicated, and the overall layout appears inconsistent.

For example, the top set of links appears flattened and is not interactive. The lower section, which seems to mirror the top with some formatting and contain navigational links; however, all items are highlighted simultaneously.

I am also not certain whether removing the “/” is the correct solution. Based on my testing, it does not remove only the trailing slash as described in the PR description, but instead removes all slashes.

I also tried clearing previous builds, rebuilding from scratch, and clearing the cache to confirm that this is not an issue on my end.

@GitToTheHub
Copy link
Contributor

Thanks for verifying this, so @dheeraj12347 checked it not correctly?

@dheeraj12347
Copy link
Author

Thanks for the detailed reviews and for testing the menu behavior locally.

You were right that using remove: '/' removed all slashes, not just a trailing one, and that it could cause the menu/highlighting issues you described. I’ve updated both www/_includes/toc_recursive_main.html and www/_includes/toc_recursive_dropdown.html so that entry_active compares include.my_entry and entry.url after only normalizing a possible trailing /, while leaving intermediate path segments unchanged.

After a clean local rebuild, the TOC no longer appears duplicated/flattened, and only the correct entry is highlighted on the pages I tested. Please let me know if this approach looks good to you or if you’d prefer any further adjustments.

@breautek
Copy link
Contributor

breautek commented Feb 6, 2026

I apologize in advance if I'm wrong but the responses appears AI-ish, which begs me to question if the PR is also written by AI.

If an AI tool is being used it will need to be disclosed. Apache does allow AI tooling to be used for contributions, but there should be a disclaimer maybe in the original PR description and perhaps in the commit message if it was generated by a particular AI tool. We also have to ensure that the tool does not place any restrictions on the use of the generated content.

When providing contributions authored using generative AI tooling, a recommended practice is for contributors to indicate the tooling used to create the contribution. This should be included as a token in the source control commit message, for example including the phrase “Generated-by: ”. This allows for future release tooling to be considered that pulls this content into a machine parsable Tooling-Provenance file.

At the very least, Apache would like the commit message to contain Generated-by: <TOOL>

Are you able to confirm if AI was used to create this PR, and if so can you add a disclaimer?

@dheeraj12347
Copy link
Author

Hi @breautek, thanks for the heads-up! I want to be clear: this PR wasn't "written" by AI. I did the local debugging and developed the logic myself. However, I did use Gemini as a sounding board to refine the Liquid syntax and to help me structure my comments so they were clear and professional.

I wasn't aware of the specific Apache disclosure policy, but I'm happy to follow it. I'll go ahead and add the Generated-by: Gemini tag to my commit messages now to stay transparent. Thanks for the guidance!

@dheeraj12347
Copy link
Author

I've updated the commit message with the Generated-by: Gemini tag and force-pushed the changes. I also double-checked the logic locally to ensure it only handles the trailing slashes and doesn't affect the rest of the URL structure. Ready for another review! @breautek @erisu

@GitToTheHub
Copy link
Contributor

Can you try another approach?

We can normalize my_entry before it enters toc_recursive_main.html and toc_recursive_dropdown.html.

my_entry is given to the includes in _layouts/docs.html. On line 18 MY_ENTRY is set:

{% assign MY_ENTRY = page.url | replace: VERSION_ROOT,"" %}

Her you can add:

{% if MY_ENTRY | slice: -1 == "/" %}
    {% assign MY_ENTRY = MY_ENTRY | slice: 0, MY_ENTRY.size | minus: 1 %}
{% endif %}

This will remove a trailing slash for my_entry. You can remove the changes you made in toc_recursive_main.html and toc_recursive_dropdown.html.

@GitToTheHub
Copy link
Contributor

Hi, I created an PR to fix the highlighting in #1471

It was because of the comparison of Jekyll's pretty URLs (e.g., "path/") vs TOC entry URLs (e.g., "path/index.html").

@GitToTheHub GitToTheHub closed this Feb 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants