Skip to content

Commit b58ffd9

Browse files
authored
Merge pull request #1011 from st3phhays/astro-sidebar
(#997) Highlight Active page
2 parents c5f55ce + 9963923 commit b58ffd9

File tree

3 files changed

+10
-11
lines changed

3 files changed

+10
-11
lines changed
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
// Scripts and types
33
import type { ContentTree } from '@scripts/types';
4+
import { isActivePage } from '@scripts/is-active-page';
45
56
interface Props {
67
content: ContentTree;
@@ -9,12 +10,8 @@ interface Props {
910
1011
const { content, paddingClass } = Astro.props;
1112
const activeSlug = Astro.url.pathname;
12-
13-
const isActivePage = () => {
14-
return content.slug === activeSlug || content.slug.slice(0, -1) === activeSlug;
15-
};
1613
---
1714

1815
<li class={`nav-item nav-item-blue`}>
19-
<a class={`nav-link ${paddingClass} ${isActivePage() ? 'active active-page' : ''}`} href={content.slug}>{content.data.title}</a>
16+
<a class={`nav-link ${paddingClass} ${isActivePage(content.slug, activeSlug) ? 'active active-page' : ''}`} href={content.slug}>{content.data.title}</a>
2017
</li>

src/components/sidebar/SidebarSelf.astro

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
// Scripts and types
33
import type { ContentTree } from '@scripts/types';
4+
import { isActivePage } from '@scripts/is-active-page';
45
import { slugId } from '@scripts/helpers';
56
67
// Components
@@ -75,7 +76,7 @@ const isActiveChild = (doc: ContentTree) => {
7576
}
7677
7778
// Check if the current document's slug matches the activeSlug
78-
if (currentDoc.slug === activeSlug || currentDoc.slug.slice(0, -1) === activeSlug) {
79+
if (isActivePage(currentDoc.slug, activeSlug)) {
7980
return true;
8081
}
8182
@@ -90,16 +91,12 @@ const isActiveChild = (doc: ContentTree) => {
9091
// If the activeSlug is not found in any document, return false
9192
return false;
9293
};
93-
94-
const isActivePage = (doc: ContentTree) => {
95-
return doc.slug === activeSlug || doc.slug.slice(0, -1) === activeSlug;
96-
};
9794
---
9895

9996
{content.filter(doc => doc.data.showInSidebar === true).map(doc => (
10097
doc.children && doc.children.length > 0 ? (
10198
<li class={`nav-item nav-item-blue ${isActiveChild(doc) ? 'active' : ''}`}>
102-
<div class={`nav-link nav-link-collapse d-flex ${isActiveChild(doc) ? 'active' : ''} ${isActivePage(doc) ? 'active-page' : ''}`}>
99+
<div class={`nav-link nav-link-collapse d-flex ${isActiveChild(doc) ? 'active' : ''} ${isActivePage(doc.slug, activeSlug) ? 'active-page' : ''}`}>
103100
<button class={`btn btn-collapse rounded-0 border-0 ${listPaddingClass(doc.data.depth)} ${isActiveChild(doc) ? '' : 'collapsed'}`} type="button" data-bs-toggle="collapse" aria-expanded={`${isActiveChild(doc) ? 'true' : 'false'}`} aria-controls={slugId(`id-${doc.slug}`)} aria-label="collapse or expand navigation" data-bs-target={slugId(`#id-${doc.slug}`)}></button>
104101
<a href={doc.slug}>{doc.data.title}</a>
105102
</div>

src/scripts/is-active-page.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import type { ContentTree } from '@scripts/types';
2+
3+
export const isActivePage = (passedSlug: string | ContentTree[], activeSlug: string) => {
4+
return passedSlug === activeSlug || `${passedSlug}/` === activeSlug || passedSlug.slice(0, -1) === activeSlug;
5+
};

0 commit comments

Comments
 (0)