mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-22 00:26:34 +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,
|
parentId?: string,
|
||||||
): MarkdownHeading {
|
): MarkdownHeading {
|
||||||
name = unescapeHTMLChars(name);
|
name = unescapeHTMLChars(name);
|
||||||
const item = {
|
const item: MarkdownHeading = {
|
||||||
id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`,
|
id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`,
|
||||||
name,
|
name,
|
||||||
level,
|
level,
|
||||||
|
@ -87,7 +87,7 @@ export class MarkdownRenderer {
|
||||||
attachHeadingsDescriptions(rawText: string) {
|
attachHeadingsDescriptions(rawText: string) {
|
||||||
const buildRegexp = (heading: MarkdownHeading) => {
|
const buildRegexp = (heading: MarkdownHeading) => {
|
||||||
return new RegExp(
|
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.component).toBe(TestComponent);
|
||||||
expect(part.props).toEqual({ children: ' Test Test ' });
|
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');
|
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', () => {
|
test('should correctly populate license identifier', () => {
|
||||||
parser.spec = {
|
parser.spec = {
|
||||||
openapi: '3.1.0',
|
openapi: '3.1.0',
|
||||||
|
|
|
@ -24,7 +24,7 @@ export class ApiInfoModel implements OpenAPIInfo {
|
||||||
this.description = parser.spec.info.description || '';
|
this.description = parser.spec.info.description || '';
|
||||||
this.summary = parser.spec.info.summary || '';
|
this.summary = parser.spec.info.summary || '';
|
||||||
|
|
||||||
const firstHeadingLinePos = this.description.search(/^##?\s+/m);
|
const firstHeadingLinePos = this.description.search(/^\s*##?\s+/m);
|
||||||
if (firstHeadingLinePos > -1) {
|
if (firstHeadingLinePos > -1) {
|
||||||
this.description = this.description.substring(0, firstHeadingLinePos);
|
this.description = this.description.substring(0, firstHeadingLinePos);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user