diff --git a/docs/redoc-vendor-extensions.md b/docs/redoc-vendor-extensions.md index 6cda3908..7328d100 100644 --- a/docs/redoc-vendor-extensions.md +++ b/docs/redoc-vendor-extensions.md @@ -54,6 +54,13 @@ Extends OpenAPI [Tag Object](http://swagger.io/specification/#tagObject) | :------------- | :------: | :---------- | | x-traitTag | boolean | In Swagger two operations can have multiply tags. This property distinguish between tags that are used to group operations (default) from tags that are used to mark operation with certain trait (`true` value) | +#### x-displayName + +| Field Name | Type | Description | +| :------------- | :------: | :---------- | +| x-displayName | string | Define the text that is used for this tag in the menu and in section headings | + + ###### Usage in Redoc Tags that have `x-traitTag` set to `true` are listed in side-menu but don't have any subitems (operations). Tag `description` is rendered as well. This is useful for handling out common things like Pagination, Rate-Limits, etc. diff --git a/lib/components/MethodsList/methods-list.html b/lib/components/MethodsList/methods-list.html index 225a1930..61caa17f 100644 --- a/lib/components/MethodsList/methods-list.html +++ b/lib/components/MethodsList/methods-list.html @@ -1,7 +1,7 @@
-

{{tag.name}}

+

{{tag.name}}

{ let suitSchema = { tags: [ {name: 'tag1', description: 'info1', 'x-traitTag': true}, - {name: 'tag2', description: 'info2'} + {name: 'tag2', description: 'info2'}, + {name: 'tag4', description: 'info2', 'x-displayName': 'Tag Four'} ], paths: { test: { @@ -19,6 +20,10 @@ describe('Spec Helper', () => { tags: ['tag1', 'tag2'], summary: 'test get' }, + delete: { + tags: ['tag4'], + summary: 'test delete' + }, // no tags post: { summary: 'test post' @@ -41,19 +46,19 @@ describe('Spec Helper', () => { }); it('should return Array with correct number of items', () => { - //2 - defined tags, 1 - tag3 and 1 [other] tag for no-tags method - menuTree.length.should.be.equal(2 + 1 + 1); + //3 - defined tags, 1 - tag3 and 1 [other] tag for no-tags method + menuTree.length.should.be.equal(3 + 1 + 1); }); it('should append not defined tags to the end of list', () => { - let info = menuTree[2]; + let info = menuTree[3]; info.name.should.be.equal('tag3'); info.methods.length.should.be.equal(1); info.methods[0].summary.should.be.equal('test put'); }); it('should append methods without tags to [other] tag', () => { - let info = menuTree[3]; + let info = menuTree[4]; info.name.should.be.equal(''); info.methods.length.should.be.equal(1); info.methods[0].summary.should.be.equal('test post'); @@ -84,6 +89,12 @@ describe('Spec Helper', () => { } } }); + + it('should use x-displayName to set custom names', () => { + let info = menuTree[2]; + info.id.should.be.equal('tag/tag4'); + info.name.should.be.equal('Tag Four'); + }); }); describe('injectors', () => { diff --git a/lib/services/schema-helper.service.ts b/lib/services/schema-helper.service.ts index 642ac585..cfdb42e2 100644 --- a/lib/services/schema-helper.service.ts +++ b/lib/services/schema-helper.service.ts @@ -315,7 +315,7 @@ export class SchemaHelper { for (let tag of schema.tags || []) { let id = 'tag/' + slugify(tag.name); tag2MethodMapping[id] = { - name: tag.name, + name: tag['x-displayName'] || tag.name, id: id, description: tag.description, headless: tag.name === '',