diff --git a/lib/components/ParamsList/params-list.js b/lib/components/ParamsList/params-list.js
index 57dbeeeb..e664af1b 100644
--- a/lib/components/ParamsList/params-list.js
+++ b/lib/components/ParamsList/params-list.js
@@ -42,10 +42,21 @@ export default class ParamsList extends BaseComponent {
this.data.noParams = !(Object.keys(paramsMap).length || this.data.bodyParam);
let paramsPlaces = ['path', 'query', 'formData', 'header', 'body'];
+ let placeHint = {
+ path: `Used together with Path Templating, where the parameter value is actually part
+ of the operation's URL. This does not include the host or base path of the API.
+ For example, in /items/{itemId}, the path parameter is itemId`,
+ query: `Parameters that are appended to the URL.
+ For example, in /items?id=###, the query parameter is id`,
+ formData: `Parameters that are submitted through a form.
+ application/x-www-form-urlencoded, multipart/form-data or both are usually
+ used as the content type of the request`,
+ header: 'Custom headers that are expected as part of the request'
+ };
let params = [];
paramsPlaces.forEach(place => {
if (paramsMap[place] && paramsMap[place].length) {
- params.push({place: place, params: paramsMap[place]});
+ params.push({place: place, placeHint: placeHint[place], params: paramsMap[place]});
}
});
this.data.params = params;
diff --git a/lib/components/ParamsList/params-list.scss b/lib/components/ParamsList/params-list.scss
index 8900423f..211c04b4 100644
--- a/lib/components/ParamsList/params-list.scss
+++ b/lib/components/ParamsList/params-list.scss
@@ -1,5 +1,7 @@
@import '../../common/styles/variables';
+$hint-color: #999999;
+
.param-list-header {
border-bottom: 1px solid rgba($text-color, .3);
padding: 0.2em 0;
@@ -60,3 +62,29 @@ header.paramType {
background-color: white;
top: 0;
}
+
+[data-hint] {
+ width: 1.2em;
+ text-align: center;
+ border-radius: 50%;
+ vertical-align: middle;
+ color: $hint-color;
+ line-height: 1.2;
+ text-transform: none;
+ cursor: help;
+ border: 1px solid $hint-color;
+ margin-left: 0.5em;
+}
+
+@media (max-width: 520px) {
+ [data-hint] {
+ float: right;
+ }
+
+ [data-hint]:after {
+ margin-left: 12px;
+ transform: translateX(-100%) translateY(-8px);
+ -moz-transform: translateX(-100%) translateY(-8px);
+ -webkit-transform: translateX(-100%) translateY(-8px);
+ }
+}
diff --git a/lib/components/Redoc/redoc.spec.js b/lib/components/Redoc/redoc.spec.js
index d271bcd4..fd7b1462 100644
--- a/lib/components/Redoc/redoc.spec.js
+++ b/lib/components/Redoc/redoc.spec.js
@@ -1,7 +1,7 @@
'use strict';
import { getChildDebugElement } from 'tests/helpers';
-import {Component, View, ViewMetadata, provide} from 'angular2/core';
+import {Component, ViewMetadata, provide} from 'angular2/core';
import {BrowserDomAdapter} from 'angular2/platform/browser';
import {
@@ -224,8 +224,8 @@ describe('Redoc components', () => {
});
/** Test component that contains a Redoc. */
-@Component({selector: 'test-app'})
-@View({
+@Component({
+ selector: 'test-app',
directives: [Redoc],
template:
``
diff --git a/lib/components/SideMenu/side-menu.js b/lib/components/SideMenu/side-menu.js
index 1637749b..d0d63042 100644
--- a/lib/components/SideMenu/side-menu.js
+++ b/lib/components/SideMenu/side-menu.js
@@ -1,6 +1,6 @@
'use strict';
-import {NgZone, ChangeDetectionStrategy, ElementRef} from 'angular2/core';
+import {ChangeDetectorRef, ChangeDetectionStrategy, ElementRef} from 'angular2/core';
import {document} from 'angular2/src/facade/browser';
import {BrowserDomAdapter} from 'angular2/platform/browser';
import {global} from 'angular2/src/facade/lang';
@@ -28,19 +28,16 @@ const INVIEW_POSITION = {
changeDetection: ChangeDetectionStrategy.Default
})
@Reflect.metadata('parameters', [[SchemaManager], [ElementRef],
- [BrowserDomAdapter], [NgZone], OptionsManager])
+ [BrowserDomAdapter], [ChangeDetectorRef], [OptionsManager]])
export default class SideMenu extends BaseComponent {
- constructor(schemaMgr, elementRef, dom, zone, optionsMgr) {
+ constructor(schemaMgr, elementRef, dom, changeDetectorRef, optionsMgr) {
super(schemaMgr);
this.$element = elementRef.nativeElement;
+ this.changeDetector = changeDetectorRef;
this.dom = dom;
this.options = optionsMgr.options;
this.$scrollParent = this.options.$scrollParent;
- // for some reason constructor is not run inside zone
- // as workaround running it manually
- zone.run(() => {
- this.bindEvents();
- });
+ this.bindEvents();
this.activeCatIdx = 0;
this.activeMethodIdx = -1;
this.prevOffsetY = null;
@@ -221,6 +218,7 @@ export default class SideMenu extends BaseComponent {
}
stable = true;
}
+ this.changeDetector.detectChanges();
}
prepareModel() {
diff --git a/lib/components/SideMenu/side-menu.spec.js b/lib/components/SideMenu/side-menu.spec.js
index 0e5ce1ad..0ebcb414 100644
--- a/lib/components/SideMenu/side-menu.spec.js
+++ b/lib/components/SideMenu/side-menu.spec.js
@@ -1,7 +1,7 @@
'use strict';
import { getChildDebugElement, mouseclick} from 'tests/helpers';
-import {Component, View, provide, ViewMetadata} from 'angular2/core';
+import {Component, provide, ViewMetadata} from 'angular2/core';
import {BrowserDomAdapter} from 'angular2/platform/browser';
import OptionsManager from 'lib/options';
@@ -196,8 +196,8 @@ describe('Redoc components', () => {
});
/** Test component that contains an ApiInfo. */
-@Component({selector: 'test-app'})
-@View({
+@Component({
+ selector: 'test-app',
directives: [MethodsList, SideMenu],
providers: [SchemaManager],
template:
diff --git a/lib/components/base.js b/lib/components/base.js
index b039b7ce..fd5a0ef4 100644
--- a/lib/components/base.js
+++ b/lib/components/base.js
@@ -1,5 +1,5 @@
'use strict';
-import {Component, View, OnInit, OnDestroy, ChangeDetectionStrategy} from 'angular2/core';
+import {Component, ChangeDetectionStrategy} from 'angular2/core';
import {CORE_DIRECTIVES, JsonPipe, AsyncPipe} from 'angular2/common';
import SchemaManager from '../utils/SchemaManager';
import JsonPointer from '../utils/JsonPointer';
@@ -74,11 +74,8 @@ export function RedocComponent(options) {
selector: options.selector,
inputs: inputs,
outputs: options.outputs,
- lifecycle: [OnInit, OnDestroy],
providers: options.providers,
- changeDetection: options.changeDetection || ChangeDetectionStrategy.Detached
- });
- let viewDecorator = View({
+ changeDetection: options.changeDetection || ChangeDetectionStrategy.Detached,
templateUrl: options.templateUrl,
template: options.template,
styles: options.styles,
@@ -86,7 +83,7 @@ export function RedocComponent(options) {
pipes: pipes
});
- return componentDecorator(viewDecorator(target) || target) || target;
+ return componentDecorator(target) || target;
};
}
@@ -185,13 +182,13 @@ export class BaseComponent {
throw new Error(errMessage);
}
- into.type = into.type || subSchema.type;
if (into.type === 'array') {
console.warn('allOf: subschemas with type array are not supported yet');
}
// TODO: add check if can be merged correctly (no different properties with the same name)
+ into.type = into.type || subSchema.type;
if (into.type === 'object' && subSchema.properties) {
into.properties || (into.properties = {});
Object.assign(into.properties, subSchema.properties);
diff --git a/lib/utils/SchemaManager.js b/lib/utils/SchemaManager.js
index 2c11af6a..b3f9dca4 100644
--- a/lib/utils/SchemaManager.js
+++ b/lib/utils/SchemaManager.js
@@ -38,6 +38,7 @@ export default class SchemaManager {
/* calculate common used values */
init() {
+ if (!this._schema || !this._schema.schemes) return;
this.apiUrl = this._schema.schemes[0] + '://' + this._schema.host + this._schema.basePath;
if (this.apiUrl.endsWith('/')) {
this.apiUrl = this.apiUrl.substr(0, this.apiUrl.length - 1);
diff --git a/lib/utils/pipes.js b/lib/utils/pipes.js
index 6d9a1ed6..80ac62e1 100644
--- a/lib/utils/pipes.js
+++ b/lib/utils/pipes.js
@@ -14,20 +14,20 @@ import 'prismjs/components/prism-php.js';
import 'prismjs/components/prism-coffeescript.js';
import 'prismjs/components/prism-go.js';
import 'prismjs/components/prism-haskell.js';
-//import 'prismjs/components/prism-scala.js';
import 'prismjs/components/prism-java.js';
import 'prismjs/components/prism-lua.js';
import 'prismjs/components/prism-matlab.js';
-import 'prismjs/components/prism-objectivec.js';
import 'prismjs/components/prism-perl.js';
import 'prismjs/components/prism-python.js';
import 'prismjs/components/prism-r.js';
import 'prismjs/components/prism-ruby.js';
import 'prismjs/components/prism-bash.js';
import 'prismjs/components/prism-swift.js';
-import 'prismjs/components/prism-vim.js';
+import 'prismjs/components/prism-objectivec.js';
+import 'prismjs/components/prism-scala.js';
import 'prismjs/themes/prism-dark.css!css';
+import 'hint.css/hint.base.css!css';
import marked from 'marked';
diff --git a/package.json b/package.json
index 7800588d..61645824 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "redoc",
"description": "Swagger-generated API Reference Documentation",
- "version": "0.7.8",
+ "version": "0.7.9",
"repository": {
"type": "git",
"url": "git://github.com/Rebilly/ReDoc"
@@ -32,8 +32,9 @@
"jspm": {
"configFile": "system.config.js",
"dependencies": {
- "angular2": "npm:angular2@2.0.0-beta.6",
+ "angular2": "npm:angular2@^2.0.0-beta.12",
"es6-shim": "github:es-shims/es6-shim@^0.33.6",
+ "hint.css": "npm:hint.css@^2.2.1",
"json": "github:systemjs/plugin-json@^0.1.0",
"json-formatter-js": "npm:json-formatter-js@^0.2.0",
"json-pointer": "npm:json-pointer@^0.3.0",
@@ -60,10 +61,10 @@
"browser-sync": "^2.10.1",
"del": "^2.2.0",
"deploy-to-gh-pages": "^1.0.0",
- "gulp": "^3.9.0",
+ "gulp": "^3.9.1",
"gulp-concat": "^2.6.0",
"gulp-eslint": "^1.1.1",
- "gulp-inline-ng2-template": "^0.0.9",
+ "gulp-inline-ng2-template": "^1.1.2",
"gulp-protractor": "^2.1.0",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.5.4",
@@ -81,13 +82,13 @@
"karma-coveralls": "^1.1.2",
"karma-jasmine": "^0.3.6",
"karma-jspm": "^2.0.2",
- "karma-mocha-reporter": "^1.1.3",
- "karma-phantomjs-launcher": "^0.2.1",
+ "karma-mocha-reporter": "^2.0.0",
+ "karma-phantomjs-launcher": "^1.0.0",
"karma-phantomjs-shim": "^1.1.2",
"karma-regex-preprocessor": "github:makern/karma-regex-preprocessor",
"karma-should": "^1.0.0",
"karma-sinon": "^1.0.4",
- "phantomjs": "^1.9.19",
+ "phantomjs-prebuilt": "^2.1.7",
"protractor": "^3.0.0",
"reflect-metadata": "^0.1.2",
"require-dir": "^0.3.0",
@@ -96,6 +97,6 @@
"sinon": "^1.17.2",
"systemjs-builder": "^0.15.2",
"vinyl-paths": "^2.0.0",
- "zone.js": "^0.5.10"
+ "zone.js": "^0.6.6"
}
}
diff --git a/system.config.js b/system.config.js
index ced0e028..3a9ecf1d 100644
--- a/system.config.js
+++ b/system.config.js
@@ -37,13 +37,14 @@ System.config({
},
map: {
- "angular2": "npm:angular2@2.0.0-beta.6",
+ "angular2": "npm:angular2@2.0.0-beta.12",
"babel": "npm:babel-core@5.8.34",
"babel-runtime": "npm:babel-runtime@5.8.34",
"clean-css": "npm:clean-css@3.4.6",
"core-js": "npm:core-js@1.2.6",
"css": "github:systemjs/plugin-css@0.1.18",
"es6-shim": "github:es-shims/es6-shim@0.33.6",
+ "hint.css": "npm:hint.css@2.2.1",
"json": "github:systemjs/plugin-json@0.1.0",
"json-formatter-js": "npm:json-formatter-js@0.2.0",
"json-pointer": "npm:json-pointer@0.3.0",
@@ -135,14 +136,10 @@ System.config({
"path": "github:jspm/nodelibs-path@0.1.0",
"process": "github:jspm/nodelibs-process@0.1.2"
},
- "npm:angular2@2.0.0-beta.6": {
- "crypto": "github:jspm/nodelibs-crypto@0.1.0",
- "es6-promise": "npm:es6-promise@3.1.2",
- "es6-shim": "npm:es6-shim@0.33.13",
- "process": "github:jspm/nodelibs-process@0.1.2",
- "reflect-metadata": "npm:reflect-metadata@0.1.2",
- "rxjs": "npm:rxjs@5.0.0-beta.0",
- "zone.js": "npm:zone.js@0.5.14"
+ "npm:angular2@2.0.0-beta.12": {
+ "reflect-metadata": "npm:reflect-metadata@0.1.3",
+ "rxjs": "npm:rxjs@5.0.0-beta.3",
+ "zone.js": "npm:zone.js@0.5.15"
},
"npm:argparse@1.0.3": {
"assert": "github:jspm/nodelibs-assert@0.1.0",
@@ -419,9 +416,6 @@ System.config({
"npm:es6-promise@3.1.2": {
"process": "github:jspm/nodelibs-process@0.1.2"
},
- "npm:es6-shim@0.33.13": {
- "process": "github:jspm/nodelibs-process@0.1.2"
- },
"npm:esprima@2.7.1": {
"fs": "github:jspm/nodelibs-fs@0.1.2",
"process": "github:jspm/nodelibs-process@0.1.2"
@@ -691,10 +685,6 @@ System.config({
"string_decoder": "npm:string_decoder@0.10.31",
"util-deprecate": "npm:util-deprecate@1.0.2"
},
- "npm:reflect-metadata@0.1.2": {
- "assert": "github:jspm/nodelibs-assert@0.1.0",
- "process": "github:jspm/nodelibs-process@0.1.2"
- },
"npm:request@2.67.0": {
"aws-sign2": "npm:aws-sign2@0.6.0",
"bl": "npm:bl@1.0.0",
@@ -732,7 +722,7 @@ System.config({
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
"process": "github:jspm/nodelibs-process@0.1.2"
},
- "npm:rxjs@5.0.0-beta.0": {
+ "npm:rxjs@5.0.0-beta.3": {
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
"process": "github:jspm/nodelibs-process@0.1.2"
},
@@ -866,10 +856,6 @@ System.config({
"systemjs-json": "github:systemjs/plugin-json@0.1.0",
"util": "github:jspm/nodelibs-util@0.1.0",
"validator": "npm:validator@4.5.0"
- },
- "npm:zone.js@0.5.14": {
- "es6-promise": "npm:es6-promise@3.1.2",
- "process": "github:jspm/nodelibs-process@0.1.2"
}
}
});