mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-14 04:46:34 +03:00
Handle additional properties (fixes #4)
This commit is contained in:
parent
9cc251e4a7
commit
b65d8c96e5
|
@ -70,7 +70,7 @@ $sub-schema-offset: ($bullet-size/2) + $bullet-margin;
|
||||||
}
|
}
|
||||||
|
|
||||||
.param-type {
|
.param-type {
|
||||||
color: $black;
|
color: rgba($black, 0.4);
|
||||||
font-size: 0.929em;
|
font-size: 0.929em;
|
||||||
line-height: $param-name-height;
|
line-height: $param-name-height;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
@ -83,10 +83,6 @@ $sub-schema-offset: ($bullet-size/2) + $bullet-margin;
|
||||||
font-weight: $base-font-weight;
|
font-weight: $base-font-weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
.param-type {
|
|
||||||
color: rgba($black, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.param-type.with-hint {
|
.param-type.with-hint {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-bottom: 0.4em;
|
margin-bottom: 0.4em;
|
||||||
|
|
|
@ -11,7 +11,11 @@
|
||||||
<table *ngIf="!schema.isTrivial" class="params-wrap" [ngClass]="{'params-array': schema._isArray}">
|
<table *ngIf="!schema.isTrivial" class="params-wrap" [ngClass]="{'params-array': schema._isArray}">
|
||||||
<!-- <caption> {{_displayType}} </caption> -->
|
<!-- <caption> {{_displayType}} </caption> -->
|
||||||
<template ngFor [ngForOf]="schema.properties" #prop="$implicit" #last="last">
|
<template ngFor [ngForOf]="schema.properties" #prop="$implicit" #last="last">
|
||||||
<tr class="param" [ngClass]="{'last': last, 'discriminator': prop.isDiscriminator && !derivedEmtpy, 'complex': prop._pointer}">
|
<tr class="param" [ngClass]="{'last': last,
|
||||||
|
'discriminator': prop.isDiscriminator && !derivedEmtpy,
|
||||||
|
'complex': prop._pointer,
|
||||||
|
'additional': prop._additional
|
||||||
|
}">
|
||||||
<td class="param-name">
|
<td class="param-name">
|
||||||
<span class="param-name-content">{{prop._name}}</span>
|
<span class="param-name-content">{{prop._name}}</span>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -89,7 +89,7 @@ export default class JsonSchema extends BaseComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
let discriminatorFieldIdx = -1;
|
let discriminatorFieldIdx = -1;
|
||||||
let props = Object.keys(schema.properties).map((prop, idx) => {
|
let props = schema.properties && Object.keys(schema.properties).map((prop, idx) => {
|
||||||
let propertySchema = schema.properties[prop];
|
let propertySchema = schema.properties[prop];
|
||||||
let propPointer = propertySchema._pointer ||
|
let propPointer = propertySchema._pointer ||
|
||||||
JsonPointer.join(schema._pointer || this.pointer, ['properties', prop]);
|
JsonPointer.join(schema._pointer || this.pointer, ['properties', prop]);
|
||||||
|
@ -105,6 +105,15 @@ export default class JsonSchema extends BaseComponent {
|
||||||
}
|
}
|
||||||
return propertySchema;
|
return propertySchema;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
props = props || [];
|
||||||
|
|
||||||
|
if (schema.additionalProperties && schema.additionalProperties !== false) {
|
||||||
|
let propsSchema = this.prepareAdditionalProperties(schema.additionalProperties);
|
||||||
|
propsSchema._additional = true;
|
||||||
|
props.push(propsSchema);
|
||||||
|
}
|
||||||
|
|
||||||
// Move discriminator field to the end of properties list
|
// Move discriminator field to the end of properties list
|
||||||
if (discriminatorFieldIdx > -1) {
|
if (discriminatorFieldIdx > -1) {
|
||||||
let discrProp = props.splice(discriminatorFieldIdx, 1);
|
let discrProp = props.splice(discriminatorFieldIdx, 1);
|
||||||
|
@ -116,6 +125,11 @@ export default class JsonSchema extends BaseComponent {
|
||||||
schema.properties = props;
|
schema.properties = props;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepareAdditionalProperties(schema) {
|
||||||
|
return JsonSchema.injectPropertyData(schema, '<Additional Properties> *',
|
||||||
|
JsonPointer.join(schema._pointer || this.pointer, ['additionalProperties']));
|
||||||
|
}
|
||||||
|
|
||||||
static injectPropertyData(propertySchema, propertyName, propPointer) {
|
static injectPropertyData(propertySchema, propertyName, propPointer) {
|
||||||
propertySchema = Object.assign({}, propertySchema);
|
propertySchema = Object.assign({}, propertySchema);
|
||||||
|
|
||||||
|
@ -190,7 +204,8 @@ const injectors = {
|
||||||
simpleType: {
|
simpleType: {
|
||||||
check: (propertySchema) => {
|
check: (propertySchema) => {
|
||||||
if (propertySchema.type === 'object') {
|
if (propertySchema.type === 'object') {
|
||||||
return !propertySchema.properties || !Object.keys(propertySchema.properties).length;
|
return (!propertySchema.properties || !Object.keys(propertySchema.properties).length)
|
||||||
|
&& (typeof propertySchema.additionalProperties !== 'object');
|
||||||
}
|
}
|
||||||
return (propertySchema.type !== 'array') && propertySchema.type;
|
return (propertySchema.type !== 'array') && propertySchema.type;
|
||||||
},
|
},
|
||||||
|
|
|
@ -73,6 +73,10 @@ json-schema[nesteven="true"] {
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.param.additional > .param-name {
|
||||||
|
color: rgba($black, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
.params-wrap {
|
.params-wrap {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user