diff --git a/src/main/javascript/view/partials/jsonSignature.js b/src/main/javascript/view/partials/jsonSignature.js
new file mode 100644
index 00000000..80b022ef
--- /dev/null
+++ b/src/main/javascript/view/partials/jsonSignature.js
@@ -0,0 +1,505 @@
+'use strict';
+
+SwaggerUi.Views.partials.jsonSignature = (function () {
+ var getModelSignature = function (name, schema, models, modelPropertyMacro) {
+ var strongOpen = '';
+ var strongClose = '';
+ var resolveSchema = function (schema) {
+ if (_.isPlainObject(schema.schema)) {
+ schema = resolveSchema(schema.schema);
+ }
+
+ return schema;
+ };
+
+ var simpleRef = function (name) {
+ if (typeof name === 'undefined') {
+ return null;
+ }
+
+ if (name.indexOf('#/definitions/') === 0) {
+ return name.substring('#/definitions/'.length);
+ } else {
+ return name;
+ }
+ };
+
+ var optionHtml = function (label, value) {
+ return '
' + _.map(schema.items, function (item) {
+ var type = item.type || 'object';
+
+ if (_.isUndefined(item.$ref)) {
+ if (_.indexOf(['array', 'object'], type) > -1) {
+ if (type === 'object' && _.isUndefined(item.properties)) {
+ return 'object';
+ } else {
+ return addReference(item);
+ }
+ } else {
+ return primitiveToOptionsHTML(item, type);
+ }
+ } else {
+ return addReference(item, simpleRef(item.$ref));
+ }
+ }).join(',
');
+ } else if (_.isPlainObject(schema.items)) {
+ if (_.isUndefined(schema.items.$ref)) {
+ if (_.indexOf(['array', 'object'], schema.items.type || 'object') > -1) {
+ if ((_.isUndefined(schema.items.type) || schema.items.type === 'object') && _.isUndefined(schema.items.properties)) {
+ html += '
object
';
+ } else {
+ html += '
' + addReference(schema.items) + '
';
+ }
+ } else {
+ html += '
' + primitiveToOptionsHTML(schema.items, schema.items.type) + '
';
+ }
+ } else {
+ html += '
' + addReference(schema.items, simpleRef(schema.items.$ref)) + '
';
+ }
+ } else {
+ console.log('Array type\'s \'items\' property is not an array or an object, cannot process');
+ html += '
object
';
+ }
+ } else {
+ if (schema.$ref) {
+ html += '
' + addReference(schema, name) + '
';
+ } else if (type === 'object') {
+ if (_.isPlainObject(schema.properties)) {
+ contents = _.map(schema.properties, function (property, name) {
+ var propertyIsRequired = (_.indexOf(schema.required, name) >= 0);
+ var cProperty = _.cloneDeep(property);
+
+ var requiredClass = propertyIsRequired ? 'required' : '';
+ var html = '
' + name + ' (';
+ var model;
+ var propDescription;
+
+ // Allow macro to set the default value
+ cProperty.default = modelPropertyMacro(cProperty);
+
+ // Resolve the schema (Handle nested schemas)
+ cProperty = resolveSchema(cProperty);
+
+ propDescription = property.description || cProperty.description;
+
+ // We need to handle property references to primitives (Issue 339)
+ if (!_.isUndefined(cProperty.$ref)) {
+ model = models[simpleRef(cProperty.$ref)];
+
+ if (!_.isUndefined(model) && _.indexOf([undefined, 'array', 'object'], model.definition.type) === -1) {
+ // Use referenced schema
+ cProperty = resolveSchema(model.definition);
+ }
+ }
+
+ html += primitiveToHTML(cProperty);
+
+ if(!propertyIsRequired) {
+ html += ', optional';
+ }
+
+ if(property.readOnly) {
+ html += ', read only';
+ }
+
+ html += ')';
+
+ if (!_.isUndefined(propDescription)) {
+ html += ': ' + '' + propDescription + '';
+ }
+
+ if (cProperty.enum) {
+ html += ' = [\'' + cProperty.enum.join('\', \'') + '\']';
+ }
+
+ return primitiveToOptionsHTML(cProperty, html);
+ }).join(',
');
+ }
+
+ if (contents) {
+ html += contents + '
';
+ }
+ } else {
+ html += '