From 39a171a61d589ef203faf332328a47cb326793ab Mon Sep 17 00:00:00 2001 From: Anna Bodnia Date: Wed, 3 Feb 2016 19:37:38 +0200 Subject: [PATCH] fixes #1186 Render primitive types in "Response Class" --- src/main/javascript/helpers/handlebars.js | 8 +++++++- src/main/javascript/view/OperationView.js | 4 ++++ src/main/javascript/view/ParameterView.js | 10 ++++++---- src/main/javascript/view/StatusCodeView.js | 15 +++++++++------ src/main/javascript/view/partials/signature.js | 17 ++++++++++++++++- src/main/template/signature.handlebars | 5 +++++ 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/javascript/helpers/handlebars.js b/src/main/javascript/helpers/handlebars.js index 9569a86b..834ed844 100644 --- a/src/main/javascript/helpers/handlebars.js +++ b/src/main/javascript/helpers/handlebars.js @@ -1,5 +1,4 @@ 'use strict'; -/*jslint eqeq: true*/ Handlebars.registerHelper('sanitize', function(html) { // 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); }); + +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) { switch (operator) { diff --git a/src/main/javascript/view/OperationView.js b/src/main/javascript/view/OperationView.js index 79afdbc0..a462c24c 100644 --- a/src/main/javascript/view/OperationView.js +++ b/src/main/javascript/view/OperationView.js @@ -183,6 +183,10 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ sampleXML: isXML ? SwaggerUi.partials.signature.createXMLSample(value.definition, value.models) : false, 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') { diff --git a/src/main/javascript/view/ParameterView.js b/src/main/javascript/view/ParameterView.js index c83921fb..b2c3491d 100644 --- a/src/main/javascript/view/ParameterView.js +++ b/src/main/javascript/view/ParameterView.js @@ -21,6 +21,7 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var modelDefinitions = this.model.modelSignature.definitions; var schema = this.model.schema || {}; var consumes = this.model.consumes || []; + var sampleJSON, signatureView; if (typeof type === 'undefined') { @@ -53,20 +54,21 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var isXML = this.contains(consumes, 'xml'); var isJSON = isXML ? this.contains(consumes, 'json') : true; + sampleJSON = SwaggerUi.partials.signature.createParameterJSONSample(modelType, modelDefinitions); var template = this.template(); $(this.el).html(template(this.model)); var signatureModel = { - sampleJSON: isJSON ? SwaggerUi.partials.signature.createParameterJSONSample(modelType, modelDefinitions) : false, - sampleXML: isXML ? SwaggerUi.partials.signature.createXMLSample(schema, modelDefinitions, true) : false, + sampleJSON: isJSON ? sampleJSON : false, + sampleXML: sampleJSON && isXML ? SwaggerUi.partials.signature.createXMLSample(schema, modelDefinitions, true) : false, isParam: true, signature: SwaggerUi.partials.signature.getParameterModelSignature(modelType, modelDefinitions), defaultRendering: this.model.defaultRendering }; - if (this.model.sampleJSON) { - var signatureView = new SwaggerUi.Views.SignatureView({model: signatureModel, tagName: 'div'}); + if (sampleJSON) { + signatureView = new SwaggerUi.Views.SignatureView({model: signatureModel, tagName: 'div'}); $('.model-signature', $(this.el)).append(signatureView.render().el); } else { diff --git a/src/main/javascript/view/StatusCodeView.js b/src/main/javascript/view/StatusCodeView.js index 2d3aa50c..9b68aec7 100644 --- a/src/main/javascript/view/StatusCodeView.js +++ b/src/main/javascript/view/StatusCodeView.js @@ -7,23 +7,26 @@ SwaggerUi.Views.StatusCodeView = Backbone.View.extend({ }, render: function(){ + var responseModel, responseModelView; var value = this.router.api.models[this.model.responseModel]; $(this.el).html(Handlebars.templates.status_code(this.model)); if (this.router.api.models.hasOwnProperty(this.model.responseModel)) { - var responseModel = { + responseModel = { 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, signature: SwaggerUi.partials.signature.getModelSignature(this.model.responseModel, value, this.router.api.models), defaultRendering: this.model.defaultRendering }; - - var responseModelView = new SwaggerUi.Views.SignatureView({model: responseModel, tagName: 'div'}); - $('.model-signature', this.$el).append(responseModelView.render().el); } 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; } }); \ No newline at end of file diff --git a/src/main/javascript/view/partials/signature.js b/src/main/javascript/view/partials/signature.js index 3b04d136..c99a7c0d 100644 --- a/src/main/javascript/view/partials/signature.js +++ b/src/main/javascript/view/partials/signature.js @@ -736,6 +736,20 @@ SwaggerUi.partials.signature = (function () { 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 name = descriptor.name; var definition = descriptor.definition; @@ -924,7 +938,8 @@ SwaggerUi.partials.signature = (function () { getParameterModelSignature: getParameterModelSignature, createParameterJSONSample: createParameterJSONSample, createSchemaXML: createSchemaXML, - createXMLSample: createXMLSample + createXMLSample: createXMLSample, + getPrimitiveSignature: getPrimitiveSignature }; })(); diff --git a/src/main/template/signature.handlebars b/src/main/template/signature.handlebars index d0964e7f..b46f3b71 100644 --- a/src/main/template/signature.handlebars +++ b/src/main/template/signature.handlebars @@ -1,3 +1,5 @@ +{{#if_or sampleJSON sampleXML}} +
+{{else}} + {{signature}} +{{/if_or}} \ No newline at end of file