fixes #1186 Render primitive types in "Response Class"

This commit is contained in:
Anna Bodnia
2016-02-03 19:37:38 +02:00
parent 0209d696fe
commit 39a171a61d
6 changed files with 47 additions and 12 deletions

View File

@@ -1,5 +1,4 @@
'use strict'; 'use strict';
/*jslint eqeq: true*/
Handlebars.registerHelper('sanitize', function(html) { Handlebars.registerHelper('sanitize', function(html) {
// Strip the script tags from the html, and return it as a Handlebars.SafeString // Strip the script tags from the html, and return it as a Handlebars.SafeString
@@ -53,6 +52,13 @@ Handlebars.registerHelper('renderTextParam', function(param) {
return new Handlebars.SafeString(result); return new Handlebars.SafeString(result);
}); });
Handlebars.registerHelper('if_or', function(v1, v2, options) {
if (v1 || v2) {
return options.fn(this);
}
return options.inverse(this);
});
Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) { Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
switch (operator) { switch (operator) {

View File

@@ -183,6 +183,10 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({
sampleXML: isXML ? SwaggerUi.partials.signature.createXMLSample(value.definition, value.models) : false, sampleXML: isXML ? SwaggerUi.partials.signature.createXMLSample(value.definition, value.models) : false,
signature: SwaggerUi.partials.signature.getModelSignature(value.name, value.definition, value.models, value.modelPropertyMacro) signature: SwaggerUi.partials.signature.getModelSignature(value.name, value.definition, value.models, value.modelPropertyMacro)
}; };
} else {
signatureModel = {
signature: SwaggerUi.partials.signature.getPrimitiveSignature(value)
};
} }
} }
} else if (this.model.responseClassSignature && this.model.responseClassSignature !== 'string') { } else if (this.model.responseClassSignature && this.model.responseClassSignature !== 'string') {

View File

@@ -21,6 +21,7 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({
var modelDefinitions = this.model.modelSignature.definitions; var modelDefinitions = this.model.modelSignature.definitions;
var schema = this.model.schema || {}; var schema = this.model.schema || {};
var consumes = this.model.consumes || []; var consumes = this.model.consumes || [];
var sampleJSON, signatureView;
if (typeof type === 'undefined') { if (typeof type === 'undefined') {
@@ -53,20 +54,21 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({
var isXML = this.contains(consumes, 'xml'); var isXML = this.contains(consumes, 'xml');
var isJSON = isXML ? this.contains(consumes, 'json') : true; var isJSON = isXML ? this.contains(consumes, 'json') : true;
sampleJSON = SwaggerUi.partials.signature.createParameterJSONSample(modelType, modelDefinitions);
var template = this.template(); var template = this.template();
$(this.el).html(template(this.model)); $(this.el).html(template(this.model));
var signatureModel = { var signatureModel = {
sampleJSON: isJSON ? SwaggerUi.partials.signature.createParameterJSONSample(modelType, modelDefinitions) : false, sampleJSON: isJSON ? sampleJSON : false,
sampleXML: isXML ? SwaggerUi.partials.signature.createXMLSample(schema, modelDefinitions, true) : false, sampleXML: sampleJSON && isXML ? SwaggerUi.partials.signature.createXMLSample(schema, modelDefinitions, true) : false,
isParam: true, isParam: true,
signature: SwaggerUi.partials.signature.getParameterModelSignature(modelType, modelDefinitions), signature: SwaggerUi.partials.signature.getParameterModelSignature(modelType, modelDefinitions),
defaultRendering: this.model.defaultRendering defaultRendering: this.model.defaultRendering
}; };
if (this.model.sampleJSON) { if (sampleJSON) {
var signatureView = new SwaggerUi.Views.SignatureView({model: signatureModel, tagName: 'div'}); signatureView = new SwaggerUi.Views.SignatureView({model: signatureModel, tagName: 'div'});
$('.model-signature', $(this.el)).append(signatureView.render().el); $('.model-signature', $(this.el)).append(signatureView.render().el);
} }
else { else {

View File

@@ -7,23 +7,26 @@ SwaggerUi.Views.StatusCodeView = Backbone.View.extend({
}, },
render: function(){ render: function(){
var responseModel, responseModelView;
var value = this.router.api.models[this.model.responseModel]; var value = this.router.api.models[this.model.responseModel];
$(this.el).html(Handlebars.templates.status_code(this.model)); $(this.el).html(Handlebars.templates.status_code(this.model));
if (this.router.api.models.hasOwnProperty(this.model.responseModel)) { if (this.router.api.models.hasOwnProperty(this.model.responseModel)) {
var responseModel = { responseModel = {
sampleJSON: JSON.stringify(SwaggerUi.partials.signature.createJSONSample(value), void 0, 2), sampleJSON: JSON.stringify(SwaggerUi.partials.signature.createJSONSample(value), void 0, 2),
sampleXML: this.model.isXML ? SwaggerUi.partials.signature.createXMLSample(this.model.schema, value.models) : false, sampleXML: this.model.isXML ? SwaggerUi.partials.signature.createXMLSample(this.model.schema, this.router.api.models) : false,
isParam: false, isParam: false,
signature: SwaggerUi.partials.signature.getModelSignature(this.model.responseModel, value, this.router.api.models), signature: SwaggerUi.partials.signature.getModelSignature(this.model.responseModel, value, this.router.api.models),
defaultRendering: this.model.defaultRendering defaultRendering: this.model.defaultRendering
}; };
var responseModelView = new SwaggerUi.Views.SignatureView({model: responseModel, tagName: 'div'});
$('.model-signature', this.$el).append(responseModelView.render().el);
} else { } else {
$('.model-signature', this.$el).html(''); responseModel = {
signature: SwaggerUi.partials.signature.getPrimitiveSignature(this.model.schema)
};
} }
responseModelView = new SwaggerUi.Views.SignatureView({model: responseModel, tagName: 'div'});
$('.model-signature', this.$el).append(responseModelView.render().el);
return this; return this;
} }
}); });

View File

@@ -736,6 +736,20 @@ SwaggerUi.partials.signature = (function () {
return value; return value;
}; };
var getPrimitiveSignature = function (schema) {
var type, items;
schema = schema || {};
items = schema.items || {};
type = schema.type || '';
switch (type) {
case 'object': return 'Object is not a primitive';
case 'array' : return 'Array[' + items.type + ']';
default: return type;
}
};
var createPrimitiveXML = function (descriptor) { var createPrimitiveXML = function (descriptor) {
var name = descriptor.name; var name = descriptor.name;
var definition = descriptor.definition; var definition = descriptor.definition;
@@ -924,7 +938,8 @@ SwaggerUi.partials.signature = (function () {
getParameterModelSignature: getParameterModelSignature, getParameterModelSignature: getParameterModelSignature,
createParameterJSONSample: createParameterJSONSample, createParameterJSONSample: createParameterJSONSample,
createSchemaXML: createSchemaXML, createSchemaXML: createSchemaXML,
createXMLSample: createXMLSample createXMLSample: createXMLSample,
getPrimitiveSignature: getPrimitiveSignature
}; };
})(); })();

View File

@@ -1,3 +1,5 @@
{{#if_or sampleJSON sampleXML}}
<div> <div>
<ul class="signature-nav"> <ul class="signature-nav">
<li><a class="description-link" href="#" data-sw-translate>Model</a></li> <li><a class="description-link" href="#" data-sw-translate>Model</a></li>
@@ -25,3 +27,6 @@
{{/if}} {{/if}}
</div> </div>
</div> </div>
{{else}}
{{signature}}
{{/if_or}}