mirror of
https://github.com/Redocly/redoc.git
synced 2025-08-07 13:44:54 +03:00
Updated MarkdownRenderer.ts to support any heading level
This commit is contained in:
parent
82df17d871
commit
42fa0ed8ea
|
@ -35,6 +35,11 @@ export interface MarkdownHeading {
|
||||||
description?: string;
|
description?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type HeadingLevelType = 1 | 2 | 3 | 4 | 5 | 6;
|
||||||
|
export type HeadingsMap = {
|
||||||
|
[key in HeadingLevelType]: MarkdownHeading;
|
||||||
|
};
|
||||||
|
|
||||||
export function buildComponentComment(name: string) {
|
export function buildComponentComment(name: string) {
|
||||||
return `<!-- ReDoc-Inject: <${name}> -->`;
|
return `<!-- ReDoc-Inject: <${name}> -->`;
|
||||||
}
|
}
|
||||||
|
@ -54,8 +59,8 @@ export class MarkdownRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
headings: MarkdownHeading[] = [];
|
headings: MarkdownHeading[] = [];
|
||||||
currentTopHeading: MarkdownHeading;
|
|
||||||
|
|
||||||
|
private headingsMap: HeadingsMap = {} as HeadingsMap;
|
||||||
private headingEnhanceRenderer: marked.Renderer;
|
private headingEnhanceRenderer: marked.Renderer;
|
||||||
private originalHeadingRule: typeof marked.Renderer.prototype.heading;
|
private originalHeadingRule: typeof marked.Renderer.prototype.heading;
|
||||||
|
|
||||||
|
@ -69,7 +74,7 @@ export class MarkdownRenderer {
|
||||||
|
|
||||||
saveHeading(
|
saveHeading(
|
||||||
name: string,
|
name: string,
|
||||||
level: number,
|
level: HeadingLevelType,
|
||||||
container: MarkdownHeading[] = this.headings,
|
container: MarkdownHeading[] = this.headings,
|
||||||
parentId?: string,
|
parentId?: string,
|
||||||
): MarkdownHeading {
|
): MarkdownHeading {
|
||||||
|
@ -121,28 +126,18 @@ export class MarkdownRenderer {
|
||||||
prevRegexp = regexp;
|
prevRegexp = regexp;
|
||||||
prevPos = currentPos;
|
prevPos = currentPos;
|
||||||
}
|
}
|
||||||
prevHeading.description = rawText
|
prevHeading.description = rawText.substring(prevPos).replace(prevRegexp, '').trim();
|
||||||
.substring(prevPos)
|
|
||||||
.replace(prevRegexp, '')
|
|
||||||
.trim();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
headingRule = (
|
headingRule = (text: string, level: HeadingLevelType, raw: string, slugger: marked.Slugger) => {
|
||||||
text: string,
|
const prevHeading = this.headingsMap[level - 1];
|
||||||
level: 1 | 2 | 3 | 4 | 5 | 6,
|
this.headingsMap[level] = this.saveHeading(
|
||||||
raw: string,
|
|
||||||
slugger: marked.Slugger,
|
|
||||||
) => {
|
|
||||||
if (level === 1) {
|
|
||||||
this.currentTopHeading = this.saveHeading(text, level);
|
|
||||||
} else if (level === 2) {
|
|
||||||
this.saveHeading(
|
|
||||||
text,
|
text,
|
||||||
level,
|
level,
|
||||||
this.currentTopHeading && this.currentTopHeading.items,
|
prevHeading && prevHeading.items,
|
||||||
this.currentTopHeading && this.currentTopHeading.id,
|
prevHeading && prevHeading.id,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
return this.originalHeadingRule(text, level, raw, slugger);
|
return this.originalHeadingRule(text, level, raw, slugger);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user