Skip to content

Commit bb3667d

Browse files
committed
feat: add GH-like anchors to h1 and h2 headings in md
1 parent 476d6c4 commit bb3667d

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

lib/utils/md-renderer.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const md = new Remarkable({
2323
export interface MarkdownHeading {
2424
title?: string;
2525
id: string;
26+
slug?: string;
2627
content?: string;
2728
children?: StringMap<MarkdownHeading>;
2829
}
@@ -52,12 +53,14 @@ export class MdRenderer {
5253
}
5354

5455
saveHeading(title: string, parent:MarkdownHeading = {id:null, children: this.headings}) :MarkdownHeading {
55-
let id = slugify(title);
56+
let slug = slugify(title);
57+
let id = slug;
5658
if (parent && parent.id) id = `${parent.id}/${id}`;
5759
parent.children = parent.children || {};
5860
parent.children[id] = {
5961
title,
60-
id
62+
id,
63+
slug
6164
};
6265
return parent.children[id];
6366
}
@@ -110,12 +113,14 @@ export class MdRenderer {
110113
this.currentTopHeading = this.saveHeading(content);;
111114
let id = this.currentTopHeading.id;
112115
return `<h${tokens[idx].hLevel} section="section/${id}">` +
113-
`<a class="share-link" href="#section/${id}"></a>`;
116+
`<a class="share-link" href="#section/${id}"></a>` +
117+
`<a name="${id.toLowerCase()}"></a>`;
114118
} else if (tokens[idx].hLevel === 2 ) {
115119
let heading = this.saveHeading(content, this.currentTopHeading);
116120
let contentSlug = `${heading.id}`;
117121
return `<h${tokens[idx].hLevel} section="section/${heading.id}">` +
118-
`<a class="share-link" href="#section/${contentSlug}"></a>`;
122+
`<a class="share-link" href="#section/${contentSlug}"></a>` +
123+
`<a name="${heading.slug.toLowerCase()}"></a>`;
119124
}
120125
}
121126
}

0 commit comments

Comments
 (0)