From 6b5e7704a01500d87a3702f7b27f95a4bdcfa10d Mon Sep 17 00:00:00 2001 From: TowyTowy <85077986+TowyTowy@users.noreply.github.com> Date: Wed, 8 Jul 2026 20:25:44 +0200 Subject: [PATCH] fix(theme): pass target and rel to prev/next page links (#5297) Co-authored-by: Claude Fable 5 --- .../theme-default/support/sidebar.test.ts | 43 ++++++++++++++++++- .../theme-default/components/VPDocFooter.vue | 4 ++ .../theme-default/composables/prev-next.ts | 24 +++++++++-- src/client/theme-default/support/sidebar.ts | 6 ++- 4 files changed, 71 insertions(+), 6 deletions(-) diff --git a/__tests__/unit/client/theme-default/support/sidebar.test.ts b/__tests__/unit/client/theme-default/support/sidebar.test.ts index 91e8085bb..7232757c2 100644 --- a/__tests__/unit/client/theme-default/support/sidebar.test.ts +++ b/__tests__/unit/client/theme-default/support/sidebar.test.ts @@ -1,4 +1,8 @@ -import { getSidebar, hasActiveLink } from 'client/theme-default/support/sidebar' +import { + getFlatSideBarLinks, + getSidebar, + hasActiveLink +} from 'client/theme-default/support/sidebar' describe('client/theme-default/support/sidebar', () => { describe('getSidebar', () => { @@ -137,6 +141,43 @@ describe('client/theme-default/support/sidebar', () => { }) }) + describe('getFlatSideBarLinks', () => { + test('flattens nested items and preserves link metadata', () => { + const sidebar = [ + { + text: 'Group', + items: [ + { text: 'Intro', link: '/intro' }, + { + text: 'External', + link: 'https://example.com/', + target: '_self', + rel: 'noopener', + docFooterText: 'Go external' + } + ] + } + ] + + expect(getFlatSideBarLinks(sidebar)).toStrictEqual([ + { + text: 'Intro', + link: '/intro', + docFooterText: undefined, + rel: undefined, + target: undefined + }, + { + text: 'External', + link: 'https://example.com/', + docFooterText: 'Go external', + rel: 'noopener', + target: '_self' + } + ]) + }) + }) + describe('hasActiveLink', () => { test('checks `SidebarItem`', () => { const item = { diff --git a/src/client/theme-default/components/VPDocFooter.vue b/src/client/theme-default/components/VPDocFooter.vue index a05ca71a1..45c6e32aa 100644 --- a/src/client/theme-default/components/VPDocFooter.vue +++ b/src/client/theme-default/components/VPDocFooter.vue @@ -53,6 +53,8 @@ const showFooter = computed( v-if="control.prev?.link" class="pager-link prev" :href="control.prev.link" + :target="control.prev.target" + :rel="control.prev.rel" >