Skip to content

Commit

Permalink
Fix trailing slash inconsistency in sidebar links (#2918)
Browse files Browse the repository at this point in the history
  • Loading branch information
HiDeoo authored Feb 25, 2025
1 parent f9a4e30 commit 790c000
Show file tree
Hide file tree
Showing 12 changed files with 226 additions and 37 deletions.
5 changes: 5 additions & 0 deletions .changeset/large-chairs-refuse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@astrojs/starlight': patch
---

Fixes a trailing slash inconsistency in generated sidebar links when using the [`trailingSlash: 'ignore'`](https://docs.astro.build/en/reference/configuration-reference/#trailingslash) Astro option (the default) between [internal](https://starlight.astro.build/guides/sidebar/#internal-links) and [auto-generated](https://starlight.astro.build/guides/sidebar/#autogenerated-groups) links. Starlight behavior for this configuration value is to use a trailing slash as many common hosting providers redirect to URLs with a trailing slash by default.
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ test('uses provided sidebar if any', async () => {
{
"attrs": {},
"badge": undefined,
"href": "/reference/frontmatter",
"href": "/reference/frontmatter/",
"isCurrent": false,
"label": "Frontmatter Reference",
"type": "link",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/getting-started",
"href": "/getting-started/",
"isCurrent": false,
"label": "Getting Started",
"type": "link",
Expand All @@ -41,7 +41,7 @@ describe('getSidebar', () => {
"text": "New",
"variant": "default",
},
"href": "/manual-setup",
"href": "/manual-setup/",
"isCurrent": false,
"label": "Do it yourself",
"type": "link",
Expand All @@ -52,7 +52,7 @@ describe('getSidebar', () => {
"text": "Eco-friendly",
"variant": "success",
},
"href": "/environmental-impact",
"href": "/environmental-impact/",
"isCurrent": false,
"label": "Eco-friendly docs",
"type": "link",
Expand All @@ -64,7 +64,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/guides/pages",
"href": "/guides/pages/",
"isCurrent": false,
"label": "Pages",
"type": "link",
Expand All @@ -75,7 +75,7 @@ describe('getSidebar', () => {
"text": "Deprecated",
"variant": "default",
},
"href": "/guides/authoring-content",
"href": "/guides/authoring-content/",
"isCurrent": false,
"label": "Authoring Content in Markdown",
"type": "link",
Expand All @@ -87,7 +87,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/resources/plugins",
"href": "/resources/plugins/",
"isCurrent": false,
"label": "Plugins and Integrations",
"type": "link",
Expand All @@ -101,15 +101,15 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr",
"href": "/fr/",
"isCurrent": true,
"label": "Starlight 🌟 Build documentation sites with Astro",
"type": "link",
},
{
"attrs": {},
"badge": undefined,
"href": "/fr/getting-started",
"href": "/fr/getting-started/",
"isCurrent": false,
"label": "Getting Started",
"type": "link",
Expand All @@ -120,7 +120,7 @@ describe('getSidebar', () => {
"text": "Nouveau",
"variant": "default",
},
"href": "/fr/manual-setup",
"href": "/fr/manual-setup/",
"isCurrent": false,
"label": "Fait maison",
"type": "link",
Expand All @@ -131,7 +131,7 @@ describe('getSidebar', () => {
"text": "Écologique",
"variant": "success",
},
"href": "/fr/environmental-impact",
"href": "/fr/environmental-impact/",
"isCurrent": false,
"label": "Eco-friendly docs",
"type": "link",
Expand All @@ -143,7 +143,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/guides/pages",
"href": "/fr/guides/pages/",
"isCurrent": false,
"label": "Pages",
"type": "link",
Expand All @@ -154,7 +154,7 @@ describe('getSidebar', () => {
"text": "Deprecated",
"variant": "default",
},
"href": "/fr/guides/authoring-content",
"href": "/fr/guides/authoring-content/",
"isCurrent": false,
"label": "Authoring Content in Markdown",
"type": "link",
Expand All @@ -166,7 +166,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/resources/plugins",
"href": "/fr/resources/plugins/",
"isCurrent": false,
"label": "Plugins and Integrations",
"type": "link",
Expand Down
44 changes: 22 additions & 22 deletions packages/starlight/__tests__/i18n-sidebar/i18n-sidebar.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/getting-started",
"href": "/getting-started/",
"isCurrent": false,
"label": "Getting Started",
"type": "link",
Expand All @@ -54,7 +54,7 @@ describe('getSidebar', () => {
"text": "New",
"variant": "default",
},
"href": "/manual-setup",
"href": "/manual-setup/",
"isCurrent": false,
"label": "Do it yourself",
"type": "link",
Expand All @@ -65,7 +65,7 @@ describe('getSidebar', () => {
"text": "Eco-friendly",
"variant": "success",
},
"href": "/environmental-impact",
"href": "/environmental-impact/",
"isCurrent": false,
"label": "Eco-friendly docs",
"type": "link",
Expand All @@ -82,7 +82,7 @@ describe('getSidebar', () => {
"text": "Test",
"variant": "default",
},
"href": "/guides/pages",
"href": "/guides/pages/",
"isCurrent": false,
"label": "Pages Guide",
"type": "link",
Expand All @@ -93,7 +93,7 @@ describe('getSidebar', () => {
"text": "Deprecated",
"variant": "default",
},
"href": "/guides/authoring-content",
"href": "/guides/authoring-content/",
"isCurrent": false,
"label": "Authoring Content in Markdown",
"type": "link",
Expand All @@ -105,7 +105,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/resources/plugins",
"href": "/resources/plugins/",
"isCurrent": false,
"label": "Plugins and Integrations",
"type": "link",
Expand All @@ -119,15 +119,15 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr",
"href": "/fr/",
"isCurrent": true,
"label": "Starlight 🌟 Construire des sites de documentation avec Astro",
"type": "link",
},
{
"attrs": {},
"badge": undefined,
"href": "/fr/getting-started",
"href": "/fr/getting-started/",
"isCurrent": false,
"label": "Mise en route",
"type": "link",
Expand All @@ -138,7 +138,7 @@ describe('getSidebar', () => {
"text": "Nouveau",
"variant": "default",
},
"href": "/fr/manual-setup",
"href": "/fr/manual-setup/",
"isCurrent": false,
"label": "Fait maison",
"type": "link",
Expand All @@ -149,7 +149,7 @@ describe('getSidebar', () => {
"text": "Écologique",
"variant": "success",
},
"href": "/fr/environmental-impact",
"href": "/fr/environmental-impact/",
"isCurrent": false,
"label": "Documents écologiques",
"type": "link",
Expand All @@ -161,7 +161,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/guides/pages",
"href": "/fr/guides/pages/",
"isCurrent": false,
"label": "Pages",
"type": "link",
Expand All @@ -172,7 +172,7 @@ describe('getSidebar', () => {
"text": "Deprecated",
"variant": "default",
},
"href": "/fr/guides/authoring-content",
"href": "/fr/guides/authoring-content/",
"isCurrent": false,
"label": "Création de contenu en Markdown",
"type": "link",
Expand All @@ -184,7 +184,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/resources/plugins",
"href": "/fr/resources/plugins/",
"isCurrent": false,
"label": "Modules d'extension et outils",
"type": "link",
Expand All @@ -198,15 +198,15 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr",
"href": "/fr/",
"isCurrent": false,
"label": "Starlight 🌟 Construire des sites de documentation avec Astro",
"type": "link",
},
{
"attrs": {},
"badge": undefined,
"href": "/fr/getting-started",
"href": "/fr/getting-started/",
"isCurrent": true,
"label": "Mise en route",
"type": "link",
Expand All @@ -217,7 +217,7 @@ describe('getSidebar', () => {
"text": "Nouveau",
"variant": "default",
},
"href": "/fr/manual-setup",
"href": "/fr/manual-setup/",
"isCurrent": false,
"label": "Fait maison",
"type": "link",
Expand All @@ -228,7 +228,7 @@ describe('getSidebar', () => {
"text": "Écologique",
"variant": "success",
},
"href": "/fr/environmental-impact",
"href": "/fr/environmental-impact/",
"isCurrent": false,
"label": "Documents écologiques",
"type": "link",
Expand All @@ -240,7 +240,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/guides/pages",
"href": "/fr/guides/pages/",
"isCurrent": false,
"label": "Pages",
"type": "link",
Expand All @@ -251,7 +251,7 @@ describe('getSidebar', () => {
"text": "Deprecated",
"variant": "default",
},
"href": "/fr/guides/authoring-content",
"href": "/fr/guides/authoring-content/",
"isCurrent": false,
"label": "Création de contenu en Markdown",
"type": "link",
Expand All @@ -263,7 +263,7 @@ describe('getSidebar', () => {
{
"attrs": {},
"badge": undefined,
"href": "/fr/resources/plugins",
"href": "/fr/resources/plugins/",
"isCurrent": false,
"label": "Modules d'extension et outils",
"type": "link",
Expand All @@ -273,12 +273,12 @@ describe('getSidebar', () => {
});
test('uses label from config for internal links', () => {
const sidebar = getSidebar('/', undefined);
const entry = sidebar.find((item) => item.type === 'link' && item.href === '/manual-setup');
const entry = sidebar.find((item) => item.type === 'link' && item.href === '/manual-setup/');
expect(entry?.label).toBe('Do it yourself');
});
test('uses translation from config for internal links', () => {
const sidebar = getSidebar('/fr', 'fr');
const entry = sidebar.find((item) => item.type === 'link' && item.href === '/fr/manual-setup');
const entry = sidebar.find((item) => item.type === 'link' && item.href === '/fr/manual-setup/');
expect(entry?.label).toBe('Fait maison');
});
test('uses intermediate sidebars cached by locales', async () => {
Expand Down
26 changes: 26 additions & 0 deletions packages/starlight/__tests__/sidebar/navigation-attributes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ vi.mock('astro:content', async () =>
docs: [
['index.mdx', { title: 'Home Page' }],
['environmental-impact.md', { title: 'Eco-friendly docs' }],
['resources/plugins.mdx', { title: 'Plugins' }],
['resources/themes.mdx', { title: 'Themes' }],
[
'reference/frontmatter.md',
{
Expand Down Expand Up @@ -72,6 +74,30 @@ describe('getSidebar', () => {
"label": "Start Here",
"type": "group",
},
{
"badge": undefined,
"collapsed": false,
"entries": [
{
"attrs": {},
"badge": undefined,
"href": "/resources/plugins/",
"isCurrent": false,
"label": "Plugins",
"type": "link",
},
{
"attrs": {},
"badge": undefined,
"href": "/resources/themes/",
"isCurrent": false,
"label": "Themes",
"type": "link",
},
],
"label": "Resources",
"type": "group",
},
{
"badge": {
"text": "Experimental",
Expand Down
Loading

0 comments on commit 790c000

Please sign in to comment.