mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-25 01:53:44 +03:00
fix: duplication of title (#2119)
Co-authored-by: Mateusz Romański <m.romanski@webspire.pl>
This commit is contained in:
parent
0b1a790090
commit
40ebfd2d63
|
@ -62,7 +62,7 @@ export class MarkdownRenderer {
|
|||
parentId?: string,
|
||||
): MarkdownHeading {
|
||||
name = unescapeHTMLChars(name);
|
||||
const item = {
|
||||
const item: MarkdownHeading = {
|
||||
id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`,
|
||||
name,
|
||||
level,
|
||||
|
@ -87,7 +87,7 @@ export class MarkdownRenderer {
|
|||
attachHeadingsDescriptions(rawText: string) {
|
||||
const buildRegexp = (heading: MarkdownHeading) => {
|
||||
return new RegExp(
|
||||
`##?\\s+${heading.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}\s*(\n|\r\n)`,
|
||||
`##?\\s+${heading.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}\s*(\n|\r\n|$|\s*)`,
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
@ -97,4 +97,22 @@ describe('Markdown renderer', () => {
|
|||
expect(part.component).toBe(TestComponent);
|
||||
expect(part.props).toEqual({ children: ' Test Test ' });
|
||||
});
|
||||
|
||||
test('should properly extract title from text', () => {
|
||||
const rawTexts = ['text before\n# Test', 'text before\n # Test', 'text before\n# Test\n'];
|
||||
rawTexts.forEach(text => {
|
||||
const headings = renderer.extractHeadings(text);
|
||||
expect(headings).toHaveLength(1);
|
||||
expect(headings[0].name).toEqual('Test');
|
||||
expect(headings[0].description).toEqual('');
|
||||
});
|
||||
|
||||
const rawTexts2 = ['# Test \n text after', '# Test \ntext after'];
|
||||
rawTexts2.forEach(text => {
|
||||
const headings = renderer.extractHeadings(text);
|
||||
expect(headings).toHaveLength(1);
|
||||
expect(headings[0].name).toEqual('Test');
|
||||
expect(headings[0].description).toEqual('text after');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -47,6 +47,30 @@ describe('Models', () => {
|
|||
expect(info.summary).toEqual('Test summary\nsome text\n## Heading\n test');
|
||||
});
|
||||
|
||||
test('should correctly populate description when 2nd line is started by white space', () => {
|
||||
parser.spec = {
|
||||
openapi: '3.0.0',
|
||||
info: {
|
||||
description: 'text before\n # Test',
|
||||
},
|
||||
} as any;
|
||||
|
||||
const info = new ApiInfoModel(parser);
|
||||
expect(info.description).toEqual('text before\n');
|
||||
});
|
||||
|
||||
test('should correctly populate description when 2nd line is only white space', () => {
|
||||
parser.spec = {
|
||||
openapi: '3.0.0',
|
||||
info: {
|
||||
description: 'text before\n \n # Test',
|
||||
},
|
||||
} as any;
|
||||
|
||||
const info = new ApiInfoModel(parser);
|
||||
expect(info.description).toEqual('text before\n');
|
||||
});
|
||||
|
||||
test('should correctly populate license identifier', () => {
|
||||
parser.spec = {
|
||||
openapi: '3.1.0',
|
||||
|
|
|
@ -24,7 +24,7 @@ export class ApiInfoModel implements OpenAPIInfo {
|
|||
this.description = parser.spec.info.description || '';
|
||||
this.summary = parser.spec.info.summary || '';
|
||||
|
||||
const firstHeadingLinePos = this.description.search(/^##?\s+/m);
|
||||
const firstHeadingLinePos = this.description.search(/^\s*##?\s+/m);
|
||||
if (firstHeadingLinePos > -1) {
|
||||
this.description = this.description.substring(0, firstHeadingLinePos);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user