mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-24 01:23:43 +03:00
Merge commit 'cfc14c8c7a545a548f0d4b14a58152914175b37f' into releases
This commit is contained in:
commit
26d97dc51b
|
@ -6,6 +6,7 @@ branches:
|
|||
- releases
|
||||
matrix:
|
||||
include:
|
||||
- env: JOB=unit
|
||||
- env: JOB=e2e-guru
|
||||
fast_finish: true
|
||||
allow_failures:
|
||||
|
|
|
@ -48,7 +48,7 @@ We host the latest and all the previous ReDoc releases on GitHub Pages-based **C
|
|||
- [Docker Engine](https://docs.docker.com/engine/api/v1.25/)
|
||||
- [Zuora](https://www.zuora.com/developer/api-reference/)
|
||||
- [Shopify Draft Orders](https://help.shopify.com/api/draft-orders)
|
||||
- [Discourse](https://docs.discourse.org)
|
||||
- [Discourse](http://docs.discourse.org)
|
||||
- [APIs.guru](https://apis.guru/api-doc/)
|
||||
|
||||
## Deployment
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dev:
|
||||
image: node:7
|
||||
image: node:7-alpine
|
||||
command: sh -c "npm install; npm start -- --host=0.0.0.0"
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="api-info-wrapper">
|
||||
<h1>{{info.title}} <span class="api-info-version">({{info.version}})</span></h1>
|
||||
<p class="download-openapi" *ngIf="specUrl">
|
||||
Download OpenAPI (fka Swagger) specification:
|
||||
Download OpenAPI specification:
|
||||
<a class="openapi-button" download target="_blank" attr.href='{{specUrl}}'> Download </a>
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
</td>
|
||||
<td class="param-info">
|
||||
<div>
|
||||
<span class="param-type {{prop.type}}" [ngClass]="{'with-hint': prop._displayTypeHint, 'tuple': prop._isTuple, 'array': prop._isArray}"
|
||||
<span class="param-type {{prop.type}}" [ngClass]="{'with-hint': prop._displayTypeHint, 'tuple': prop._isTuple, 'array': (prop._isArray || prop.type == 'array')}"
|
||||
title="{{prop._displayTypeHint}}"> {{prop._displayType}} {{prop._displayFormat}}
|
||||
<span class="param-range" *ngIf="prop._range"> {{prop._range}} </span>
|
||||
</span>
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
<div class="background">
|
||||
<div class="background-actual"> </div>
|
||||
</div>
|
||||
<div class="menu-content" sticky-sidebar [scrollParent]="options.$scrollParent" [scrollYOffset]="options.scrollYOffset">
|
||||
<div class="menu-content" sticky-sidebar [disable]="specLoading"
|
||||
[scrollParent]="options.$scrollParent" [scrollYOffset]="options.scrollYOffset">
|
||||
<div class="menu-header">
|
||||
<api-logo> </api-logo>
|
||||
<redoc-search> </redoc-search>
|
||||
|
|
|
@ -27,6 +27,10 @@ import {
|
|||
} from '../../services/';
|
||||
import { LazyTasksService } from '../../shared/components/LazyFor/lazy-for';
|
||||
|
||||
function getPreOptions() {
|
||||
return Redoc._preOptions || {};
|
||||
}
|
||||
|
||||
@Component({
|
||||
selector: 'redoc',
|
||||
templateUrl: './redoc.html',
|
||||
|
@ -49,14 +53,14 @@ export class Redoc extends BaseComponent implements OnInit {
|
|||
|
||||
loadingProgress: number;
|
||||
|
||||
private element: HTMLElement;
|
||||
private $parent: Element;
|
||||
private $refElem: Element;
|
||||
|
||||
@Input() specUrl: string;
|
||||
@HostBinding('class.loading') specLoading: boolean = false;
|
||||
@HostBinding('class.loading-remove') specLoadingRemove: boolean = false;
|
||||
|
||||
private element: HTMLElement;
|
||||
private $parent: Element;
|
||||
private $refElem: Element;
|
||||
|
||||
constructor(
|
||||
specMgr: SpecManager,
|
||||
optionsMgr: OptionsService,
|
||||
|
@ -69,7 +73,7 @@ export class Redoc extends BaseComponent implements OnInit {
|
|||
super(specMgr);
|
||||
SchemaHelper.setSpecManager(specMgr);
|
||||
// merge options passed before init
|
||||
optionsMgr.options = Redoc._preOptions || {};
|
||||
optionsMgr.options = getPreOptions();
|
||||
|
||||
this.element = elementRef.nativeElement;
|
||||
this.$parent = this.element.parentElement;
|
||||
|
|
|
@ -86,6 +86,10 @@ pre {
|
|||
|
||||
.type-string {
|
||||
color: #66B16E;
|
||||
& + a {
|
||||
color: #66B16E;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.callback-function {
|
||||
|
|
|
@ -15,7 +15,7 @@ describe('Common components', () => {
|
|||
});
|
||||
describe('StickySidebar Component', () => {
|
||||
let builder;
|
||||
let component;
|
||||
let component: StickySidebar;
|
||||
let fixture;
|
||||
|
||||
beforeEach(() => {
|
||||
|
@ -31,6 +31,7 @@ describe('Common components', () => {
|
|||
});
|
||||
|
||||
it('should start unsticked', () => {
|
||||
component.disable = true;
|
||||
spyOn(component, 'stick').and.callThrough();
|
||||
spyOn(component, 'stickBottom').and.callThrough();
|
||||
fixture.detectChanges();
|
||||
|
@ -41,7 +42,9 @@ describe('Common components', () => {
|
|||
it('should stick to the top on the next animation frame', (done) => {
|
||||
spyOn(component, 'stick').and.callThrough();
|
||||
spyOn(component, 'stickBottom').and.callThrough();
|
||||
component.disable = true;
|
||||
fixture.detectChanges();
|
||||
component.disable = false;
|
||||
requestAnimationFrame(() => {
|
||||
expect(component.stick).toHaveBeenCalled();
|
||||
expect(component.stickBottom).toHaveBeenCalled();
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
'use strict';
|
||||
|
||||
import { Directive, ElementRef, Input, OnInit, OnDestroy } from '@angular/core';
|
||||
import { Directive, ElementRef, Input, OnInit, OnDestroy, OnChanges} from '@angular/core';
|
||||
import { BrowserDomAdapter as DOM } from '../../../utils/browser-adapter';
|
||||
|
||||
@Directive({
|
||||
selector: '[sticky-sidebar]'
|
||||
})
|
||||
export class StickySidebar implements OnInit, OnDestroy {
|
||||
export class StickySidebar implements OnInit, OnDestroy, OnChanges {
|
||||
$element: any;
|
||||
cancelScrollBinding: any;
|
||||
$redocEl: any;
|
||||
@Input() scrollParent:any;
|
||||
@Input() scrollYOffset:any;
|
||||
@Input() disable:any;
|
||||
|
||||
constructor(elementRef:ElementRef) {
|
||||
this.$element = elementRef.nativeElement;
|
||||
|
@ -33,14 +34,16 @@ export class StickySidebar implements OnInit, OnDestroy {
|
|||
|
||||
updatePosition() {
|
||||
var stuck = false;
|
||||
if ( this.scrollY + this.scrollYOffset() >= this.$redocEl.offsetTop) {
|
||||
if ( this.scrollY + this.scrollYOffset() >= this.$redocEl.offsetTop && !this.disable) {
|
||||
this.stick();
|
||||
stuck = true;
|
||||
} else {
|
||||
this.unstick();
|
||||
}
|
||||
|
||||
if ( this.scrollY + window.innerHeight - this.scrollYOffset() >= this.$redocEl.scrollHeight) {
|
||||
|
||||
if ( this.scrollY + window.innerHeight - this.scrollYOffset()
|
||||
>= this.$redocEl.scrollHeight && !this.disable) {
|
||||
this.stickBottom();
|
||||
stuck = true;
|
||||
} else {
|
||||
|
@ -86,6 +89,11 @@ export class StickySidebar implements OnInit, OnDestroy {
|
|||
requestAnimationFrame(() => this.updatePosition());
|
||||
}
|
||||
|
||||
ngOnChanges() {
|
||||
if (!this.$redocEl || this.disable) return;
|
||||
this.updatePosition();
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.unbind();
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ function valueToHTML(value) {
|
|||
} else if (valueType === 'number') {
|
||||
output += decorateWithSpan(value, 'type-number');
|
||||
} else if (valueType === 'string') {
|
||||
if (/^(http|https):\/\/[^\\s]+$/.test(value)) {
|
||||
if (/^(http|https):\/\/[^\s]+$/.test(value)) {
|
||||
output += decorateWithSpan('"', 'type-string') + '<a href="' + value + '">' + htmlEncode(value) + '</a>' +
|
||||
decorateWithSpan('"', 'type-string');
|
||||
} else {
|
||||
|
|
|
@ -8,13 +8,12 @@ import {
|
|||
FormDataParameter,
|
||||
Spec,
|
||||
Response
|
||||
} from '@types/swagger-schema-official';
|
||||
} from 'swagger-schema-official';
|
||||
|
||||
export interface RedocInjectedPointer {
|
||||
_pointer?: string;
|
||||
}
|
||||
|
||||
|
||||
export interface SwaggerOperation extends Operation, RedocInjectedPointer {}
|
||||
export interface SwaggerBodyParameter extends BodyParameter, RedocInjectedPointer {}
|
||||
export interface SwaggerHeaderParameter extends HeaderParameter, RedocInjectedPointer {}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "redoc",
|
||||
"description": "Swagger-generated API Reference Documentation",
|
||||
"version": "1.16.0",
|
||||
"version": "1.16.1",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/Rebilly/ReDoc"
|
||||
|
@ -60,7 +60,7 @@
|
|||
"@types/jasmine": "^2.5.47",
|
||||
"@types/requirejs": "^2.1.29",
|
||||
"@types/should": "^8.3.0",
|
||||
"@types/swagger-schema-official": "^2.0.4",
|
||||
"@types/swagger-schema-official": "^2.0.5",
|
||||
"@types/webpack": "^2.2.15",
|
||||
"angular2-template-loader": "^0.6.2",
|
||||
"awesome-typescript-loader": "^3.1.3",
|
||||
|
@ -94,7 +94,7 @@
|
|||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-webpack": "^2.0.3",
|
||||
"mark.js": "github:julmot/mark.js",
|
||||
"node-sass": "^4.5.2",
|
||||
"node-sass": "^4.5.3",
|
||||
"openapi-sampler": "^0.4.1",
|
||||
"phantomjs-prebuilt": "^2.1.14",
|
||||
"prismjs": "^1.5.1",
|
||||
|
@ -113,6 +113,7 @@
|
|||
"stream-http": "^2.7.0",
|
||||
"string-replace-webpack-plugin": "^0.1.3",
|
||||
"style-loader": "^0.17.0",
|
||||
"swagger-schema-official": "^2.0.0-bab6bed",
|
||||
"ts-helpers": "^1.1.1",
|
||||
"tslint": "^5.2.0",
|
||||
"typescript": "^2.3.2",
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
"types": [
|
||||
"jasmine",
|
||||
"should",
|
||||
"webpack"
|
||||
"webpack",
|
||||
"swagger-schema-official"
|
||||
],
|
||||
"outDir": "dist",
|
||||
"lib": [
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
"dom"
|
||||
],
|
||||
"types": [
|
||||
"webpack"
|
||||
"webpack",
|
||||
"swagger-schema-official"
|
||||
]
|
||||
},
|
||||
"exclude": [
|
||||
|
|
Loading…
Reference in New Issue
Block a user