'use strict'; SwaggerUi.Views.ParameterView = Backbone.View.extend({ initialize: function(){ Handlebars.registerHelper('isArray', function(param, opts) { if (param.type.toLowerCase() === 'array' || param.allowMultiple) { return opts.fn(this); } else { return opts.inverse(this); } }); }, render: function() { var type = this.model.type || this.model.dataType; if (typeof type === 'undefined') { var schema = this.model.schema; if (schema && schema.$ref) { var ref = schema.$ref; if (ref.indexOf('#/definitions/') === 0) { type = ref.substring('#/definitions/'.length); } else { type = ref; } } } this.model.type = type; this.model.paramType = this.model.in || this.model.paramType; this.model.isBody = this.model.paramType === 'body' || this.model.in === 'body'; this.model.isFile = type && type.toLowerCase() === 'file'; // Allow for default === false if(typeof this.model.default === 'undefined') { this.model.default = this.model.defaultValue; } this.model.hasDefault = (typeof this.model.default !== 'undefined'); this.model.valueId = 'm' + this.model.name + Math.random(); if (this.model.allowableValues) { this.model.isList = true; } var template = this.template(); $(this.el).html(template(this.model)); var signatureModel = { sampleJSON: this.model.sampleJSON, isParam: true, signature: this.model.signature }; if (this.model.sampleJSON) { var signatureView = new SwaggerUi.Views.SignatureView({model: signatureModel, tagName: 'div'}); $('.model-signature', $(this.el)).append(signatureView.render().el); } else { $('.model-signature', $(this.el)).html(this.model.signature); } var isParam = false; if (this.model.isBody) { isParam = true; } var contentTypeModel = { isParam: isParam }; contentTypeModel.consumes = this.model.consumes; if (isParam) { var parameterContentTypeView = new SwaggerUi.Views.ParameterContentTypeView({model: contentTypeModel}); $('.parameter-content-type', $(this.el)).append(parameterContentTypeView.render().el); } else { var responseContentTypeView = new SwaggerUi.Views.ResponseContentTypeView({model: contentTypeModel}); $('.response-content-type', $(this.el)).append(responseContentTypeView.render().el); } return this; }, // Return an appropriate template based on if the parameter is a list, readonly, required template: function(){ if (this.model.isList) { return Handlebars.templates.param_list; } else { if (this.options.readOnly) { if (this.model.required) { return Handlebars.templates.param_readonly_required; } else { return Handlebars.templates.param_readonly; } } else { if (this.model.required) { return Handlebars.templates.param_required; } else { return Handlebars.templates.param; } } } } });