mirror of
https://github.com/Redocly/redoc.git
synced 2025-05-29 10:13:03 +03:00
Added simple paramaters list
This commit is contained in:
parent
ff437c9b00
commit
b30bf98402
|
@ -6,3 +6,4 @@
|
||||||
<p class="method-summary">
|
<p class="method-summary">
|
||||||
{{data.methodInfo.description}}
|
{{data.methodInfo.description}}
|
||||||
</p>
|
</p>
|
||||||
|
<params-list pointer="{{pointer}}/parameters"> </params-list>
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
import {JsonPointer} from '../../utils/JsonPointer';
|
import {JsonPointer} from '../../utils/JsonPointer';
|
||||||
import {RedocComponent, BaseComponent} from '../base';
|
import {RedocComponent, BaseComponent} from '../base';
|
||||||
|
import {ParamsList} from '../ParamsList/params-list';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'method',
|
selector: 'method',
|
||||||
templateUrl: './lib/components/Method/method.html',
|
templateUrl: './lib/components/Method/method.html',
|
||||||
styleUrls: ['./lib/components/Method/method.css']
|
styleUrls: ['./lib/components/Method/method.css'],
|
||||||
|
directives: [ParamsList]
|
||||||
})
|
})
|
||||||
export class Method extends BaseComponent {
|
export class Method extends BaseComponent {
|
||||||
constructor(schemaMgr) {
|
constructor(schemaMgr) {
|
||||||
|
|
5
lib/components/MethodsList/methods-list.css
Normal file
5
lib/components/MethodsList/methods-list.css
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
method {
|
||||||
|
padding-bottom: 50px;
|
||||||
|
display: block;
|
||||||
|
border-bottom: 1px solid silver;
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import {Method} from '../Method/method';
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'methods-list',
|
selector: 'methods-list',
|
||||||
templateUrl: './lib/components/MethodsList/methods-list.html',
|
templateUrl: './lib/components/MethodsList/methods-list.html',
|
||||||
|
styleUrls: ['./lib/components/MethodsList/methods-list.css'],
|
||||||
directives: [Method]
|
directives: [Method]
|
||||||
})
|
})
|
||||||
export class MethodsList extends BaseComponent {
|
export class MethodsList extends BaseComponent {
|
||||||
|
|
24
lib/components/ParamsList/params-list.css
Normal file
24
lib/components/ParamsList/params-list.css
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 200;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.param {
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.param > span {
|
||||||
|
padding: 5px 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.param-name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.param-type {
|
||||||
|
padding: 2px 10px;
|
||||||
|
background-color: #EAEAEA;
|
||||||
|
border: silver 1px solid;
|
||||||
|
}
|
18
lib/components/ParamsList/params-list.html
Normal file
18
lib/components/ParamsList/params-list.html
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<h4> Parameters </h4>
|
||||||
|
<small class="no-params" *ng-if="data.noParams"> No parameters </small>
|
||||||
|
<div *ng-for="#param of data.params">
|
||||||
|
<div class="param">
|
||||||
|
<span class="param-name">{{param.name}}</span>
|
||||||
|
<span class="param-type" [ng-class]="param.type">{{param.type}}</span>
|
||||||
|
<span class="param-description">{{param.description}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="param body-param" *ng-if="data.bodyParam">
|
||||||
|
<span class="param-name">{{data.bodyParam.name}}</span>
|
||||||
|
<span class="param-type" *ng-if="data.bodyParam.type"
|
||||||
|
[ng-class]="data.bodyParam.type">{{data.bodyParam.type}}</span>
|
||||||
|
<span class="param-description" *ng-if="data.bodyParamdescription" >
|
||||||
|
{{data.bodyParam.description}}
|
||||||
|
</span>
|
||||||
|
<span> <em>Body Schema would be somewhere here (unimplemented yet) </em></span>
|
||||||
|
</div>
|
59
lib/components/ParamsList/params-list.js
Normal file
59
lib/components/ParamsList/params-list.js
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import {JsonPointer} from '../../utils/JsonPointer';
|
||||||
|
import {RedocComponent, BaseComponent} from '../base';
|
||||||
|
|
||||||
|
@RedocComponent({
|
||||||
|
selector: 'params-list',
|
||||||
|
templateUrl: './lib/components/ParamsList/params-list.html',
|
||||||
|
styleUrls: ['./lib/components/ParamsList/params-list.css']
|
||||||
|
})
|
||||||
|
export class ParamsList extends BaseComponent {
|
||||||
|
constructor(schemaMgr) {
|
||||||
|
super(schemaMgr);
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareModel() {
|
||||||
|
this.data = {};
|
||||||
|
let params = this.componentSchema;
|
||||||
|
let pathParams = this.getPathParams();
|
||||||
|
if (pathParams) params.concat(pathParams);
|
||||||
|
this.sortParams(params);
|
||||||
|
|
||||||
|
// temporary hanlde body param
|
||||||
|
if (params.length && params[params.length - 1].in === 'body') {
|
||||||
|
let bodyParam = params.pop();
|
||||||
|
bodyParam.type = bodyParam.schema.type
|
||||||
|
|| `Object(${JsonPointer.baseName(bodyParam.schema.$ref)})`;
|
||||||
|
this.data.bodyParam = bodyParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.data.noParams = !(params.length || this.data.bodyParam);
|
||||||
|
this.data.params = params;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPathParams() {
|
||||||
|
let ptr = JsonPointer.dirName(this.pointer, 2) + '/parameters';
|
||||||
|
let pathParams = this.schemaMgr.byPointer(ptr);
|
||||||
|
if (Array.isArray(pathParams)) {
|
||||||
|
return pathParams;
|
||||||
|
}
|
||||||
|
if (pathParams && pathParams.$ref) {
|
||||||
|
return this.schemaMgr.byPointer(pathParams.$ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
sortParams(params) {
|
||||||
|
const sortOrder = {
|
||||||
|
'path' : 0,
|
||||||
|
'query' : 10,
|
||||||
|
'formData' : 20,
|
||||||
|
'header': 40,
|
||||||
|
'body': 50
|
||||||
|
};
|
||||||
|
|
||||||
|
params.sort((a, b) => sortOrder[a] - sortOrder[b]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,6 @@ import JsonPointerLib from 'json-pointer';
|
||||||
* Wrapper for JsonPointer. Provides common operations
|
* Wrapper for JsonPointer. Provides common operations
|
||||||
*/
|
*/
|
||||||
export class JsonPointer extends JsonPointerLib {
|
export class JsonPointer extends JsonPointerLib {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns last JsonPointer token
|
* returns last JsonPointer token
|
||||||
* if level > 1 returns levels last (second last/third last)
|
* if level > 1 returns levels last (second last/third last)
|
||||||
|
@ -19,6 +18,31 @@ export class JsonPointer extends JsonPointerLib {
|
||||||
let tokens = JsonPointer.parse(pointer);
|
let tokens = JsonPointer.parse(pointer);
|
||||||
return tokens[tokens.length - (level)];
|
return tokens[tokens.length - (level)];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns dirname of pointer
|
||||||
|
* if level > 1 returns corresponding dirname in the hierarchy
|
||||||
|
* @example
|
||||||
|
* // returns /path/0
|
||||||
|
* JsonPointerHelper.dirName('/path/0/subpath')
|
||||||
|
* // returns /path
|
||||||
|
* JsonPointerHelper.dirName('/path/foo/subpath', 2)
|
||||||
|
*/
|
||||||
|
static dirName(pointer, level=1) {
|
||||||
|
let tokens = JsonPointer.parse(pointer);
|
||||||
|
return JsonPointer.compile(tokens.slice(0, tokens.length - level));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* overridden JsonPointer original parse to take care of prefixing '#' symbol
|
||||||
|
* that is not valid JsonPointer
|
||||||
|
*/
|
||||||
|
static parse(pointer) {
|
||||||
|
let ptr = pointer;
|
||||||
|
if (ptr.charAt(0) === '#') {
|
||||||
|
ptr = ptr.substring(1);
|
||||||
|
}
|
||||||
|
return JsonPointerLib.parse(ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
export default JsonPointer;
|
export default JsonPointer;
|
||||||
|
|
|
@ -40,7 +40,11 @@ export class SchemaManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
byPointer(pointer) {
|
byPointer(pointer) {
|
||||||
return JsonPointer.get(this._schema, pointer);
|
let res = null;
|
||||||
|
try {
|
||||||
|
res = JsonPointer.get(this._schema, pointer);
|
||||||
|
} catch(e) {/*skip*/ }
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user