diff --git a/Dockerfile b/Dockerfile
index 05e9d50b..9283619d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,6 +19,4 @@ WORKDIR /build
ADD package.json /build/package.json
RUN npm install
ADD . /build
-CMD PATH=$PATH:node_modules/.bin cake dist
-=======
-CMD PATH=$PATH:node_modules/.bin cake dist
+CMD ./node_modules/gulp/bin/gulp.js serve
diff --git a/README.md b/README.md
index 15d5efa6..a333e29e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Swagger UI
-[](https://travis-ci.org/swagger-api/swagger-ui)
+[](https://travis-ci.org/swagger-api/swagger-ui)
Swagger UI is part of the Swagger project. The Swagger project allows you to produce, visualize and consume your OWN RESTful services. No proxy or 3rd party services required. Do it your own way.
@@ -20,7 +20,7 @@ The Swagger Specification has undergone 4 revisions since initial creation in 20
Swagger UI Version | Release Date | Swagger Spec compatibility | Notes | Status
------------------ | ------------ | -------------------------- | ----- | ------
-2.1.0-M1 | 2015-01-31 | 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-ui) |
+2.1.5-M1 | 2015-02-18 | 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-ui) |
2.0.24 | 2014-09-12 | 1.1, 1.2 | [tag v2.0.24](https://github.com/swagger-api/swagger-ui/tree/v2.0.24) |
1.0.13 | 2013-03-08 | 1.1, 1.2 | [tag v1.0.13](https://github.com/swagger-api/swagger-ui/tree/v1.0.13) |
1.0.1 | 2011-10-11 | 1.0, 1.1 | [tag v1.0.1](https://github.com/swagger-api/swagger-ui/tree/v1.0.1) |
@@ -46,20 +46,12 @@ To build swagger-ui using a docker container:
```
docker build -t swagger-ui-builder .
-docker run -v $PWD/dist:/build/dist swagger-ui-builder
-```
-
-### Build using Docker
-
-To build swagger-ui using a docker container:
-
-```
-docker build -t swagger-ui-builder .
-docker run -v $PWD/dist:/build/dist swagger-ui-builder
+docker run -p 127.0.0.1:8080:8080 swagger-ui-builder
```
+This will start Swagger UI at `http://localhost:8080`.
### Use
-Once you open the Swagger UI, it will load the [Swagger Petstore](http://petstore.swagger.wordnik.com/v2/swagger.json) service and show its APIs. You can enter your own server url and click explore to view the API.
+Once you open the Swagger UI, it will load the [Swagger Petstore](http://petstore.swagger.io/v2/swagger.json) service and show its APIs. You can enter your own server url and click explore to view the API.
### Customize
You may choose to customize Swagger UI for your organization. Here is an overview of whats in its various directories:
@@ -78,7 +70,7 @@ To use swagger-ui you should take a look at the [source of swagger-ui html page]
```javascript
window.swaggerUi = new SwaggerUi({
- url:"http://petstore.swagger.wordnik.com/v2/swagger.json",
+ url:"http://petstore.swagger.io/v2/swagger.json",
dom_id:"swagger-ui-container"
});
@@ -154,7 +146,7 @@ You can verify CORS support with one of three techniques:
- Curl your API and inspect the headers. For instance:
```bash
-$ curl -I "http://petstore.swagger.wordnik.com/v2/swagger.json"
+$ curl -I "http://petstore.swagger.io/v2/swagger.json"
HTTP/1.1 200 OK
Date: Sat, 31 Jan 2015 23:05:44 GMT
Access-Control-Allow-Origin: *
diff --git a/dist/lib/swagger-client.js b/dist/lib/swagger-client.js
index 2566fa27..5173335d 100644
--- a/dist/lib/swagger-client.js
+++ b/dist/lib/swagger-client.js
@@ -1,6 +1,6 @@
/**
* swagger-client - swagger.js is a javascript client for use with swaggering APIs.
- * @version v2.1.0-alpha.7
+ * @version v2.1.5-M1
* @link http://swagger.io
* @license apache 2.0
*/
@@ -31,7 +31,13 @@ ArrayModel.prototype.createJSONSample = function(modelsToIgnore) {
}
else if (this.ref) {
var name = simpleRef(this.ref);
- result = models[name].createJSONSample();
+ if(typeof modelsToIgnore[name] === 'undefined') {
+ modelsToIgnore[name] = this;
+ result = models[name].createJSONSample(modelsToIgnore);
+ }
+ else {
+ return name;
+ }
}
return [ result ];
};
@@ -51,10 +57,31 @@ ArrayModel.prototype.getSampleValue = function(modelsToIgnore) {
ArrayModel.prototype.getMockSignature = function(modelsToIgnore) {
var propertiesStr = [];
-
- if(this.ref) {
- return models[simpleRef(this.ref)].getMockSignature();
+ var i, prop;
+ for (i = 0; i < this.properties.length; i++) {
+ prop = this.properties[i];
+ propertiesStr.push(prop.toString());
}
+
+ var strong = '';
+ var stronger = '';
+ var strongClose = '';
+ var classOpen = strong + 'array' + ' {' + strongClose;
+ var classClose = strong + '}' + strongClose;
+ var returnVal = classOpen + '
' + model.getMockSignature(modelsToIgnore));
+ }
+ }
+ return returnVal;
};
@@ -76,10 +103,10 @@ SwaggerAuthorizations.prototype.remove = function(name) {
SwaggerAuthorizations.prototype.apply = function (obj, authorizations) {
var status = null;
- var key, value, result;
+ var key, name, value, result;
// if the "authorizations" key is undefined, or has an empty array, add all keys
- if (typeof authorizations === 'undefined' || Object.keys(authorizations).length == 0) {
+ if (typeof authorizations === 'undefined' || Object.keys(authorizations).length === 0) {
for (key in this.authz) {
value = this.authz[key];
result = value.apply(obj, authorizations);
@@ -90,6 +117,7 @@ SwaggerAuthorizations.prototype.apply = function (obj, authorizations) {
else {
// 2.0 support
if (Array.isArray(authorizations)) {
+
for (var i = 0; i < authorizations.length; i++) {
var auth = authorizations[i];
for (name in auth) {
@@ -273,6 +301,10 @@ PrimitiveModel.prototype.getMockSignature = function(modelsToIgnore) {
}
return returnVal;
};
+var addModel = function(name, model) {
+ models[name] = model;
+};
+
var SwaggerClient = function(url, options) {
this.isBuilt = false;
this.url = null;
@@ -284,13 +316,14 @@ var SwaggerClient = function(url, options) {
this.isValid = false;
this.info = null;
this.useJQuery = false;
+ this.resourceCount = 0;
if(typeof url !== 'undefined')
return this.initialize(url, options);
};
SwaggerClient.prototype.initialize = function (url, options) {
- this.models = models;
+ this.models = models = {};
options = (options||{});
@@ -324,6 +357,7 @@ SwaggerClient.prototype.initialize = function (url, options) {
this.options = options;
if (typeof options.success === 'function') {
+ this.ready = true;
this.build();
}
};
@@ -379,7 +413,6 @@ SwaggerClient.prototype.build = function(mock) {
return obj;
new SwaggerHttp().execute(obj);
}
-
return this;
};
@@ -400,8 +433,16 @@ SwaggerClient.prototype.buildFromSpec = function(response) {
// legacy support
this.authSchemes = response.securityDefinitions;
- var location;
+ var definedTags = {};
+ if(Array.isArray(response.tags)) {
+ definedTags = {};
+ for(k = 0; k < response.tags.length; k++) {
+ var t = response.tags[k];
+ definedTags[t.name] = t;
+ }
+ }
+ var location;
if(typeof this.url === 'string') {
location = this.parseUri(this.url);
}
@@ -467,8 +508,13 @@ SwaggerClient.prototype.buildFromSpec = function(response) {
operationGroup.operations = {};
operationGroup.label = tag;
operationGroup.apis = [];
+ var tagObject = definedTags[tag];
+ if(typeof tagObject === 'object') {
+ operationGroup.description = tagObject.description;
+ operationGroup.externalDocs = tagObject.externalDocs;
+ }
this[tag].help = this.help.bind(operationGroup);
- this.apisArray.push(new OperationGroup(tag, operationObject));
+ this.apisArray.push(new OperationGroup(tag, operationGroup.description, operationGroup.externalDocs, operationObject));
}
operationGroup[operationId] = operationObject.execute.bind(operationObject);
operationGroup[operationId].help = operationObject.help.bind(operationObject);
@@ -495,8 +541,11 @@ SwaggerClient.prototype.buildFromSpec = function(response) {
}
}
this.isBuilt = true;
- if (this.success)
+ if (this.success) {
+ this.isValid = true;
+ this.isBuilt = true;
this.success();
+ }
return this;
};
@@ -534,14 +583,14 @@ SwaggerClient.prototype.fail = function(message) {
throw message;
};
-var OperationGroup = function(tag, operation) {
+var OperationGroup = function(tag, description, externalDocs, operation) {
this.tag = tag;
this.path = tag;
+ this.description = description;
+ this.externalDocs = externalDocs;
this.name = tag;
this.operation = operation;
this.operationsArray = [];
-
- this.description = operation.description || "";
};
var Operation = function(parent, scheme, operationId, httpMethod, path, args, definitions) {
@@ -571,18 +620,32 @@ var Operation = function(parent, scheme, operationId, httpMethod, path, args, de
this.description = args.description;
this.useJQuery = parent.useJQuery;
+ if(typeof this.deprecated === 'string') {
+ switch(this.deprecated.toLowerCase()) {
+ case 'true': case 'yes': case '1': {
+ this.deprecated = true;
+ break;
+ }
+ case 'false': case 'no': case '0': case null: {
+ this.deprecated = false;
+ break;
+ }
+ default: this.deprecated = Boolean(this.deprecated);
+ }
+ }
+
+ var i, model;
+
if(definitions) {
// add to global models
var key;
for(key in this.definitions) {
- var model = new Model(key, definitions[key]);
+ model = new Model(key, definitions[key]);
if(model) {
models[key] = model;
}
}
}
-
- var i;
for(i = 0; i < this.parameters.length; i++) {
var param = this.parameters[i];
if(param.type === 'array') {
@@ -607,17 +670,20 @@ var Operation = function(parent, scheme, operationId, httpMethod, path, args, de
param.allowableValues.descriptiveValues.push({value : value, isDefault: isDefault});
}
}
- if(param.type === 'array' && typeof param.allowableValues === 'undefined') {
- // can't show as a list if no values to select from
- delete param.isList;
- delete param.allowMultiple;
+ if(param.type === 'array') {
+ innerType = [innerType];
+ if(typeof param.allowableValues === 'undefined') {
+ // can't show as a list if no values to select from
+ delete param.isList;
+ delete param.allowMultiple;
+ }
}
- param.signature = this.getModelSignature(innerType, models);
+ param.signature = this.getModelSignature(innerType, models).toString();
param.sampleJSON = this.getModelSampleJSON(innerType, models);
param.responseClassSignature = param.signature;
}
- var defaultResponseCode, response, model, responses = this.responses;
+ var defaultResponseCode, response, responses = this.responses;
if(responses['200']) {
response = responses['200'];
@@ -689,10 +755,14 @@ Operation.prototype.getType = function (param) {
str = 'long';
else if(type === 'integer')
str = 'integer';
- else if(type === 'string' && format === 'date-time')
- str = 'date-time';
- else if(type === 'string' && format === 'date')
- str = 'date';
+ else if(type === 'string') {
+ if(format === 'date-time')
+ str = 'date-time';
+ else if(format === 'date')
+ str = 'date';
+ else
+ str = 'string';
+ }
else if(type === 'number' && format === 'float')
str = 'float';
else if(type === 'number' && format === 'double')
@@ -701,8 +771,6 @@ Operation.prototype.getType = function (param) {
str = 'double';
else if(type === 'boolean')
str = 'boolean';
- else if(type === 'string')
- str = 'string';
else if(type === 'array') {
isArray = true;
if(param.items)
@@ -764,16 +832,21 @@ Operation.prototype.getModelSignature = function(type, definitions) {
listType = true;
type = type[0];
}
+ else if(typeof type === 'undefined')
+ type = 'undefined';
if(type === 'string')
isPrimitive = true;
else
isPrimitive = (listType && definitions[listType]) || (definitions[type]) ? false : true;
if (isPrimitive) {
- return type;
+ if(listType)
+ return 'Array[' + type + ']';
+ else
+ return type.toString();
} else {
if (listType)
- return definitions[type].getMockSignature();
+ return 'Array[' + definitions[type].getMockSignature() + ']';
else
return definitions[type].getMockSignature();
}
@@ -795,9 +868,7 @@ Operation.prototype.getHeaderParams = function (args) {
if (param.in === 'header') {
var value = args[param.name];
if(Array.isArray(value))
- value = this.encodePathCollection(param.collectionFormat, param.name, value);
- else
- value = this.encodePathParam(value);
+ value = value.toString();
headers[param.name] = value;
}
}
@@ -965,8 +1036,13 @@ Operation.prototype.execute = function(arg1, arg2, arg3, arg4, parent) {
fail(message);
return;
}
- var headers = this.getHeaderParams(args);
- headers = this.setContentTypes(args, opts);
+ var allHeaders = this.getHeaderParams(args);
+ var contentTypeHeaders = this.setContentTypes(args, opts);
+
+ var headers = {}, attrname;
+ for (attrname in allHeaders) { headers[attrname] = allHeaders[attrname]; }
+ for (attrname in contentTypeHeaders) { headers[attrname] = contentTypeHeaders[attrname]; }
+
var body = this.getBody(headers, args);
var url = this.urlify(args);
@@ -989,14 +1065,13 @@ Operation.prototype.execute = function(arg1, arg2, arg3, arg4, parent) {
if(opts.mock === true)
return obj;
else
- new SwaggerHttp().execute(obj);
+ new SwaggerHttp().execute(obj, opts);
};
Operation.prototype.setContentTypes = function(args, opts) {
// default type
var accepts = 'application/json';
var consumes = args.parameterContentType || 'application/json';
-
var allDefinedParams = this.parameters;
var definedFormParams = [];
var definedFileParams = [];
@@ -1013,10 +1088,10 @@ Operation.prototype.setContentTypes = function(args, opts) {
else
definedFormParams.push(param);
}
- else if(param.in === 'header' && this.headers) {
+ else if(param.in === 'header' && opts) {
var key = param.name;
- var headerValue = this.headers[param.name];
- if(typeof this.headers[param.name] !== 'undefined')
+ var headerValue = opts[param.name];
+ if(typeof opts[param.name] !== 'undefined')
headers[key] = headerValue;
}
else if(param.in === 'body' && typeof args[param.name] !== 'undefined') {
@@ -1184,21 +1259,20 @@ var Model = function(name, definition) {
};
Model.prototype.createJSONSample = function(modelsToIgnore) {
- var result = {};
+ var i, result = {};
modelsToIgnore = (modelsToIgnore||{});
modelsToIgnore[this.name] = this;
- var i;
for (i = 0; i < this.properties.length; i++) {
prop = this.properties[i];
- result[prop.name] = prop.getSampleValue(modelsToIgnore);
+ var sample = prop.getSampleValue(modelsToIgnore);
+ result[prop.name] = sample;
}
delete modelsToIgnore[this.name];
return result;
};
Model.prototype.getSampleValue = function(modelsToIgnore) {
- var i;
- var obj = {};
+ var i, obj = {};
for(i = 0; i < this.properties.length; i++ ) {
var property = this.properties[i];
obj[property.name] = property.sampleValue(false, modelsToIgnore);
@@ -1207,8 +1281,7 @@ Model.prototype.getSampleValue = function(modelsToIgnore) {
};
Model.prototype.getMockSignature = function(modelsToIgnore) {
- var propertiesStr = [];
- var i, prop;
+ var i, prop, propertiesStr = [];
for (i = 0; i < this.properties.length; i++) {
prop = this.properties[i];
propertiesStr.push(prop.toString());
@@ -1251,7 +1324,7 @@ var Property = function(name, obj, required) {
this.optional = true;
this.optional = !required;
this.default = obj.default || null;
- this.example = obj.example || null;
+ this.example = obj.example !== undefined ? obj.example : null;
this.collectionFormat = obj.collectionFormat || null;
this.maximum = obj.maximum || null;
this.exclusiveMaximum = obj.exclusiveMaximum || null;
@@ -1282,7 +1355,7 @@ Property.prototype.isArray = function () {
Property.prototype.sampleValue = function(isArray, ignoredModels) {
isArray = (isArray || this.isArray());
ignoredModels = (ignoredModels || {});
- var type = getStringSignature(this.obj);
+ var type = getStringSignature(this.obj, true);
var output;
if(this.$ref) {
@@ -1292,8 +1365,9 @@ Property.prototype.sampleValue = function(isArray, ignoredModels) {
ignoredModels[type] = this;
output = refModel.getSampleValue(ignoredModels);
}
- else
- type = refModel;
+ else {
+ output = refModelName;
+ }
}
else if(this.example)
output = this.example;
@@ -1301,6 +1375,8 @@ Property.prototype.sampleValue = function(isArray, ignoredModels) {
output = this.default;
else if(type === 'date-time')
output = new Date().toISOString();
+ else if(type === 'date')
+ output = new Date().toISOString().split("T")[0];
else if(type === 'string')
output = 'string';
else if(type === 'integer')
@@ -1322,16 +1398,20 @@ Property.prototype.sampleValue = function(isArray, ignoredModels) {
return output;
};
-getStringSignature = function(obj) {
+getStringSignature = function(obj, baseComponent) {
var str = '';
if(typeof obj.$ref !== 'undefined')
str += simpleRef(obj.$ref);
else if(typeof obj.type === 'undefined')
str += 'object';
else if(obj.type === 'array') {
- str += 'Array[';
- str += getStringSignature((obj.items || obj.$ref || {}));
- str += ']';
+ if(baseComponent)
+ str += getStringSignature((obj.items || obj.$ref || {}));
+ else {
+ str += 'Array[';
+ str += getStringSignature((obj.items || obj.$ref || {}));
+ str += ']';
+ }
}
else if(obj.type === 'integer' && obj.format === 'int32')
str += 'integer';
@@ -1402,7 +1482,7 @@ Property.prototype.toString = function() {
type = '';
}
else {
- this.schema.type;
+ type = this.schema.type;
}
if (this.default)
@@ -1463,7 +1543,7 @@ Property.prototype.toString = function() {
optionHtml = function(label, value) {
return ' ';
-}
+};
typeFromJsonSchema = function(type, format) {
var str;
@@ -1496,7 +1576,7 @@ var cookies = {};
var models = {};
SwaggerClient.prototype.buildFrom1_2Spec = function (response) {
- if (response.apiVersion != null) {
+ if (response.apiVersion !== null) {
this.apiVersion = response.apiVersion;
}
this.apis = {};
@@ -1532,6 +1612,7 @@ SwaggerClient.prototype.buildFrom1_2Spec = function (response) {
this.apisArray.push(res);
} else {
var k;
+ this.expectedResourceCount = response.apis.length;
for (k = 0; k < response.apis.length; k++) {
var resource = response.apis[k];
res = new SwaggerResource(resource, this);
@@ -1540,15 +1621,22 @@ SwaggerClient.prototype.buildFrom1_2Spec = function (response) {
}
}
this.isValid = true;
- if (typeof this.success === 'function') {
- this.success();
- }
return this;
};
+SwaggerClient.prototype.finish = function() {
+ if (typeof this.success === 'function') {
+ this.isValid = true;
+ this.ready = true;
+ this.isBuilt = true;
+ this.selfReflect();
+ this.success();
+ }
+};
+
SwaggerClient.prototype.buildFrom1_1Spec = function (response) {
log('This API is using a deprecated version of Swagger! Please see http://github.com/wordnik/swagger-core/wiki for more info');
- if (response.apiVersion != null)
+ if (response.apiVersion !== null)
this.apiVersion = response.apiVersion;
this.apis = {};
this.apisArray = [];
@@ -1594,7 +1682,7 @@ SwaggerClient.prototype.buildFrom1_1Spec = function (response) {
SwaggerClient.prototype.convertInfo = function (resp) {
if(typeof resp == 'object') {
- var info = {}
+ var info = {};
info.title = resp.title;
info.description = resp.description;
@@ -1623,9 +1711,6 @@ SwaggerClient.prototype.selfReflect = function () {
}
this.setConsolidatedModels();
this.ready = true;
- if (typeof this.success === 'function') {
- return this.success();
- }
};
SwaggerClient.prototype.setConsolidatedModels = function () {
@@ -1658,13 +1743,14 @@ var SwaggerResource = function (resourceObj, api) {
this.description = resourceObj.description;
this.authorizations = (resourceObj.authorizations || {});
+
var parts = this.path.split('/');
this.name = parts[parts.length - 1].replace('.{format}', '');
this.basePath = this.api.basePath;
this.operations = {};
this.operationsArray = [];
this.modelsArray = [];
- this.models = {};
+ this.models = api.models || {};
this.rawModels = {};
this.useJQuery = (typeof api.useJQuery !== 'undefined') ? api.useJQuery : null;
@@ -1690,9 +1776,11 @@ var SwaggerResource = function (resourceObj, api) {
on: {
response: function (resp) {
var responseObj = resp.obj || JSON.parse(resp.data);
+ _this.api.resourceCount += 1;
return _this.addApiDeclaration(responseObj);
},
error: function (response) {
+ _this.api.resourceCount += 1;
return _this.api.fail('Unable to read api \'' +
_this.name + '\' from path ' + _this.url + ' (server returned ' + response.statusText + ')');
}
@@ -1736,7 +1824,7 @@ SwaggerResource.prototype.addApiDeclaration = function (response) {
this.consumes = response.consumes;
if ((typeof response.basePath === 'string') && response.basePath.replace(/\s/g, '').length > 0)
this.basePath = response.basePath.indexOf('http') === -1 ? this.getAbsoluteBasePath(response.basePath) : response.basePath;
-
+ this.resourcePath = response.resourcePath;
this.addModels(response.models);
if (response.apis) {
for (var i = 0 ; i < response.apis.length; i++) {
@@ -1746,7 +1834,9 @@ SwaggerResource.prototype.addApiDeclaration = function (response) {
}
this.api[this.name] = this;
this.ready = true;
- return this.api.selfReflect();
+ if(this.api.resourceCount === this.api.expectedResourceCount)
+ this.api.finish();
+ return this;
};
SwaggerResource.prototype.addModels = function (models) {
@@ -2015,9 +2105,23 @@ var SwaggerOperation = function (nickname, path, method, parameters, summary, no
this.consumes = consumes;
this.produces = produces;
this.authorizations = typeof authorizations !== 'undefined' ? authorizations : resource.authorizations;
- this.deprecated = (typeof deprecated === 'string' ? Boolean(deprecated) : deprecated);
+ this.deprecated = deprecated;
this['do'] = __bind(this['do'], this);
+ if(typeof this.deprecated === 'string') {
+ switch(this.deprecated.toLowerCase()) {
+ case 'true': case 'yes': case '1': {
+ this.deprecated = true;
+ break;
+ }
+ case 'false': case 'no': case '0': case null: {
+ this.deprecated = false;
+ break;
+ }
+ default: this.deprecated = Boolean(this.deprecated);
+ }
+ }
+
if (errors.length > 0) {
console.error('SwaggerOperation errors', errors, arguments);
this.resource.api.fail(errors);
@@ -2025,7 +2129,7 @@ var SwaggerOperation = function (nickname, path, method, parameters, summary, no
this.path = this.path.replace('{format}', 'json');
this.method = this.method.toLowerCase();
- this.isGetMethod = this.method === 'GET';
+ this.isGetMethod = this.method === 'get';
var i, j, v;
this.resourceName = this.resource.name;
@@ -2076,17 +2180,17 @@ var SwaggerOperation = function (nickname, path, method, parameters, summary, no
}
}
}
- else if (param.allowableValues != null) {
+ else if (param.allowableValues) {
if (param.allowableValues.valueType === 'RANGE')
param.isRange = true;
else
param.isList = true;
- if (param.allowableValues != null) {
+ if (param.allowableValues) {
param.allowableValues.descriptiveValues = [];
if (param.allowableValues.values) {
for (j = 0; j < param.allowableValues.values.length; j++) {
v = param.allowableValues.values[j];
- if (param.defaultValue != null) {
+ if (param.defaultValue !== null) {
param.allowableValues.descriptiveValues.push({
value: String(v),
isDefault: (v === param.defaultValue)
@@ -2156,7 +2260,7 @@ SwaggerOperation.prototype.getSampleJSON = function (type, models) {
var isPrimitive, listType, val;
listType = this.isListType(type);
isPrimitive = ((typeof listType !== 'undefined') && models[listType]) || (typeof models[type] !== 'undefined') ? false : true;
- val = isPrimitive ? void 0 : (listType != null ? models[listType].createJSONSample() : models[type].createJSONSample());
+ val = isPrimitive ? void 0 : (listType ? models[listType].createJSONSample() : models[type].createJSONSample());
if (val) {
val = listType ? [val] : val;
if (typeof val == 'string')
@@ -2191,7 +2295,7 @@ SwaggerOperation.prototype['do'] = function (args, opts, callback, error) {
callback = function (response) {
var content;
content = null;
- if (response != null) {
+ if (response !== null) {
content = response.data;
} else {
content = 'no data';
@@ -2202,7 +2306,7 @@ SwaggerOperation.prototype['do'] = function (args, opts, callback, error) {
params = {};
params.headers = [];
- if (args.headers != null) {
+ if (args.headers) {
params.headers = args.headers;
delete args.headers;
}
@@ -2289,7 +2393,7 @@ SwaggerOperation.prototype.urlify = function (args) {
if (param.paramType === 'path') {
if (typeof args[param.name] !== 'undefined') {
// apply path params and remove from args
- var reg = new RegExp('\\{\\s*?' + param.name + '.*?\\}(?=\\s*?(\\/?|$))', 'gi');
+ var reg = new RegExp('\\{\\s*?' + param.name + '[^\\{\\}\\/]*(?:\\{.*?\\}[^\\{\\}\\/]*)*\\}(?=(\\/?|$))', 'gi');
url = url.replace(reg, this.encodePathParam(args[param.name]));
delete args[param.name];
}
@@ -2323,7 +2427,7 @@ SwaggerOperation.prototype.urlify = function (args) {
}
}
}
- if ((queryParams != null) && queryParams.length > 0)
+ if ((queryParams) && queryParams.length > 0)
url += '?' + queryParams;
return url;
};
@@ -2532,7 +2636,7 @@ var SwaggerRequest = function (type, url, params, opts, successCallback, errorCa
}
var obj;
- if (!((this.headers != null) && (this.headers.mock != null))) {
+ if (!((this.headers) && (this.headers.mock))) {
obj = {
url: this.url,
method: this.type,
@@ -2657,7 +2761,7 @@ SwaggerRequest.prototype.setHeaders = function (params, opts, operation) {
*/
var SwaggerHttp = function() {};
-SwaggerHttp.prototype.execute = function(obj) {
+SwaggerHttp.prototype.execute = function(obj, opts) {
if(obj && (typeof obj.useJQuery === 'boolean'))
this.useJQuery = obj.useJQuery;
else
@@ -2668,9 +2772,9 @@ SwaggerHttp.prototype.execute = function(obj) {
}
if(this.useJQuery)
- return new JQueryHttpClient().execute(obj);
+ return new JQueryHttpClient(opts).execute(obj);
else
- return new ShredHttpClient().execute(obj);
+ return new ShredHttpClient(opts).execute(obj);
};
SwaggerHttp.prototype.isIE8 = function() {
@@ -2755,7 +2859,7 @@ JQueryHttpClient.prototype.execute = function(obj) {
if(contentType) {
if(contentType.indexOf("application/json") === 0 || contentType.indexOf("+json") > 0) {
try {
- out.obj = response.responseJSON || {};
+ out.obj = response.responseJSON || JSON.parse(out.data) || {};
} catch (ex) {
// do not set out.obj
log("unable to parse JSON content");
@@ -2778,8 +2882,8 @@ JQueryHttpClient.prototype.execute = function(obj) {
/*
* ShredHttpClient is a light-weight, node or browser HTTP client
*/
-var ShredHttpClient = function(options) {
- this.options = (options||{});
+var ShredHttpClient = function(opts) {
+ this.opts = (opts||{});
this.isInitialized = false;
var identity, toString;
@@ -2790,7 +2894,7 @@ var ShredHttpClient = function(options) {
}
else
this.Shred = require("shred");
- this.shred = new this.Shred(options);
+ this.shred = new this.Shred(opts);
};
ShredHttpClient.prototype.initShred = function () {
@@ -2901,7 +3005,9 @@ e.ApiKeyAuthorization = ApiKeyAuthorization;
e.PasswordAuthorization = PasswordAuthorization;
e.CookieAuthorization = CookieAuthorization;
e.SwaggerClient = SwaggerClient;
+e.SwaggerApi = SwaggerClient;
e.Operation = Operation;
e.Model = Model;
-e.models = models;
+e.addModel = addModel;
+
})();
\ No newline at end of file
diff --git a/dist/lib/swagger-oauth.js b/dist/lib/swagger-oauth.js
index bcbc2745..4d2e2080 100644
--- a/dist/lib/swagger-oauth.js
+++ b/dist/lib/swagger-oauth.js
@@ -14,8 +14,8 @@ function handleLogin() {
var defs = auths;
for(key in defs) {
var auth = defs[key];
+ oauth2KeyName = key;
if(auth.type === 'oauth2' && auth.scopes) {
- oauth2KeyName = key;
var scope;
if(Array.isArray(auth.scopes)) {
// 1.2 support
diff --git a/dist/swagger-ui.js b/dist/swagger-ui.js
index 3361b36b..24be6288 100644
--- a/dist/swagger-ui.js
+++ b/dist/swagger-ui.js
@@ -393,27 +393,6 @@ Handlebars.registerHelper('sanitize', function(html) {
this["Handlebars"]["templates"]["basic_auth_button_view"] = Handlebars.template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
return "\n' + label + ': ' + value + '