From 38ac8428d13a1cf3717a56f22b76e07a349ff9d8 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Tue, 17 Mar 2015 16:29:02 -0700 Subject: [PATCH] rebuilt --- dist/swagger-ui.js | 3353 ++++++++++++++++++++-------------------- dist/swagger-ui.min.js | 4 +- 2 files changed, 1678 insertions(+), 1679 deletions(-) diff --git a/dist/swagger-ui.js b/dist/swagger-ui.js index 8f4c3a59..9d3c21bd 100644 --- a/dist/swagger-ui.js +++ b/dist/swagger-ui.js @@ -4,236 +4,236 @@ * @link http://swagger.io * @license Apache 2.0 */ -(function(){'use strict'; - -window.SwaggerUi = Backbone.Router.extend({ - - dom_id: 'swagger_ui', - - // Attributes - options: null, - api: null, - headerView: null, - mainView: null, - - // SwaggerUi accepts all the same options as SwaggerApi - initialize: function(options) { - options = options || {}; - - // Allow dom_id to be overridden - if (options.dom_id) { - this.dom_id = options.dom_id; - delete options.dom_id; - } - - if (!options.supportedSubmitMethods){ - options.supportedSubmitMethods = [ - 'get', - 'put', - 'post', - 'delete', - 'head', - 'options', - 'patch' - ]; - } - - // Create an empty div which contains the dom_id - if (! $('#' + this.dom_id).length){ - $('body').append('
') ; - } - - this.options = options; - - // set marked options - marked.setOptions({gfm: true}); - - // Set the callbacks - var that = this; - this.options.success = function() { return that.render(); }; - this.options.progress = function(d) { return that.showMessage(d); }; - this.options.failure = function(d) { return that.onLoadFailure(d); }; - - // Create view to handle the header inputs - this.headerView = new SwaggerUi.Views.HeaderView({el: $('#header')}); - - // Event handler for when the baseUrl/apiKey is entered by user - this.headerView.on('update-swagger-ui', function(data) { - return that.updateSwaggerUi(data); - }); - }, - - // Set an option after initializing - setOption: function(option, value) { - this.options[option] = value; - }, - - // Get the value of a previously set option - getOption: function(option) { - return this.options[option]; - }, - - // Event handler for when url/key is received from user - updateSwaggerUi: function(data){ - this.options.url = data.url; - this.load(); - }, - - // Create an api and render - load: function(){ - // Initialize the API object - if (this.mainView) { - this.mainView.clear(); - } - var url = this.options.url; - if (url && url.indexOf('http') !== 0) { - url = this.buildUrl(window.location.href.toString(), url); - } - - this.options.url = url; - this.headerView.update(url); - - this.api = new SwaggerClient(this.options); - }, - - // collapse all sections - collapseAll: function(){ - Docs.collapseEndpointListForResource(''); - }, - - // list operations for all sections - listAll: function(){ - Docs.collapseOperationsForResource(''); - }, - - // expand operations for all sections - expandAll: function(){ - Docs.expandOperationsForResource(''); - }, - - // This is bound to success handler for SwaggerApi - // so it gets called when SwaggerApi completes loading - render: function(){ - this.showMessage('Finished Loading Resource Information. Rendering Swagger UI...'); - this.mainView = new SwaggerUi.Views.MainView({ - model: this.api, - el: $('#' + this.dom_id), - swaggerOptions: this.options, - router: this - }).render(); - this.showMessage(); - switch (this.options.docExpansion) { - case 'full': - this.expandAll(); break; - case 'list': - this.listAll(); break; - default: - break; - } - this.renderGFM(); - - if (this.options.onComplete){ - this.options.onComplete(this.api, this); - } - - setTimeout(Docs.shebang.bind(this), 100); - }, - - buildUrl: function(base, url){ - if (url.indexOf('/') === 0) { - var parts = base.split('/'); - base = parts[0] + '//' + parts[2]; - return base + url; - } else { - var endOfPath = base.length; - - if (base.indexOf('?') > -1){ - endOfPath = Math.min(endOfPath, base.indexOf('?')); - } - - if (base.indexOf('#') > -1){ - endOfPath = Math.min(endOfPath, base.indexOf('#')); - } - - base = base.substring(0, endOfPath); - - if (base.indexOf('/', base.length - 1 ) !== -1){ - return base + url; - } - - return base + '/' + url; - } - }, - - // Shows message on topbar of the ui - showMessage: function(data){ - if (data === undefined) { - data = ''; - } - $('#message-bar').removeClass('message-fail'); - $('#message-bar').addClass('message-success'); - $('#message-bar').html(data); - }, - - // shows message in red - onLoadFailure: function(data){ - if (data === undefined) { - data = ''; - } - $('#message-bar').removeClass('message-success'); - $('#message-bar').addClass('message-fail'); - - var val = $('#message-bar').html(data); - - if (this.options.onFailure) { - this.options.onFailure(data); - } - - return val; - }, - - // Renders GFM for elements with 'markdown' class - renderGFM: function(){ - $('.markdown').each(function(){ - $(this).html(marked($(this).html())); - }); - } - -}); - -window.SwaggerUi.Views = {}; - -// don't break backward compatibility with previous versions and warn users to upgrade their code -(function(){ - window.authorizations = { - add: function() { - warn('using window.authorizations is depreciated. Please use waggerUi.api.clientAuthorizations.add().'); - - if (typeof window.swaggerUi === 'undefined') { - throw new TypeError('window.swaggerUi is not defined'); - } - - if (window.swaggerUi instanceof SwaggerUi) { - window.swaggerUi.api.clientAuthorizations.add.apply(window.swaggerUi.api.clientAuthorizations, arguments); - } - } - }; - - window.ApiKeyAuthorization = function() { - warn('window.ApiKeyAuthorization is depreciated. Please use SwaggerClient.ApiKeyAuthorization.'); - SwaggerClient.ApiKeyAuthorization.apply(window, arguments); - }; - - window.PasswordAuthorization = function() { - warn('window.PasswordAuthorization is depreciated. Please use SwaggerClient.PasswordAuthorization.'); - SwaggerClient.PasswordAuthorization.apply(window, arguments); - }; - - function warn(message) { - if ('console' in window && typeof window.console.warn === 'function') { - console.warn(message); - } - } +(function(){'use strict'; + +window.SwaggerUi = Backbone.Router.extend({ + + dom_id: 'swagger_ui', + + // Attributes + options: null, + api: null, + headerView: null, + mainView: null, + + // SwaggerUi accepts all the same options as SwaggerApi + initialize: function(options) { + options = options || {}; + + // Allow dom_id to be overridden + if (options.dom_id) { + this.dom_id = options.dom_id; + delete options.dom_id; + } + + if (!options.supportedSubmitMethods){ + options.supportedSubmitMethods = [ + 'get', + 'put', + 'post', + 'delete', + 'head', + 'options', + 'patch' + ]; + } + + // Create an empty div which contains the dom_id + if (! $('#' + this.dom_id).length){ + $('body').append('
') ; + } + + this.options = options; + + // set marked options + marked.setOptions({gfm: true}); + + // Set the callbacks + var that = this; + this.options.success = function() { return that.render(); }; + this.options.progress = function(d) { return that.showMessage(d); }; + this.options.failure = function(d) { return that.onLoadFailure(d); }; + + // Create view to handle the header inputs + this.headerView = new SwaggerUi.Views.HeaderView({el: $('#header')}); + + // Event handler for when the baseUrl/apiKey is entered by user + this.headerView.on('update-swagger-ui', function(data) { + return that.updateSwaggerUi(data); + }); + }, + + // Set an option after initializing + setOption: function(option, value) { + this.options[option] = value; + }, + + // Get the value of a previously set option + getOption: function(option) { + return this.options[option]; + }, + + // Event handler for when url/key is received from user + updateSwaggerUi: function(data){ + this.options.url = data.url; + this.load(); + }, + + // Create an api and render + load: function(){ + // Initialize the API object + if (this.mainView) { + this.mainView.clear(); + } + var url = this.options.url; + if (url && url.indexOf('http') !== 0) { + url = this.buildUrl(window.location.href.toString(), url); + } + + this.options.url = url; + this.headerView.update(url); + + this.api = new SwaggerClient(this.options); + }, + + // collapse all sections + collapseAll: function(){ + Docs.collapseEndpointListForResource(''); + }, + + // list operations for all sections + listAll: function(){ + Docs.collapseOperationsForResource(''); + }, + + // expand operations for all sections + expandAll: function(){ + Docs.expandOperationsForResource(''); + }, + + // This is bound to success handler for SwaggerApi + // so it gets called when SwaggerApi completes loading + render: function(){ + this.showMessage('Finished Loading Resource Information. Rendering Swagger UI...'); + this.mainView = new SwaggerUi.Views.MainView({ + model: this.api, + el: $('#' + this.dom_id), + swaggerOptions: this.options, + router: this + }).render(); + this.showMessage(); + switch (this.options.docExpansion) { + case 'full': + this.expandAll(); break; + case 'list': + this.listAll(); break; + default: + break; + } + this.renderGFM(); + + if (this.options.onComplete){ + this.options.onComplete(this.api, this); + } + + setTimeout(Docs.shebang.bind(this), 100); + }, + + buildUrl: function(base, url){ + if (url.indexOf('/') === 0) { + var parts = base.split('/'); + base = parts[0] + '//' + parts[2]; + return base + url; + } else { + var endOfPath = base.length; + + if (base.indexOf('?') > -1){ + endOfPath = Math.min(endOfPath, base.indexOf('?')); + } + + if (base.indexOf('#') > -1){ + endOfPath = Math.min(endOfPath, base.indexOf('#')); + } + + base = base.substring(0, endOfPath); + + if (base.indexOf('/', base.length - 1 ) !== -1){ + return base + url; + } + + return base + '/' + url; + } + }, + + // Shows message on topbar of the ui + showMessage: function(data){ + if (data === undefined) { + data = ''; + } + $('#message-bar').removeClass('message-fail'); + $('#message-bar').addClass('message-success'); + $('#message-bar').html(data); + }, + + // shows message in red + onLoadFailure: function(data){ + if (data === undefined) { + data = ''; + } + $('#message-bar').removeClass('message-success'); + $('#message-bar').addClass('message-fail'); + + var val = $('#message-bar').html(data); + + if (this.options.onFailure) { + this.options.onFailure(data); + } + + return val; + }, + + // Renders GFM for elements with 'markdown' class + renderGFM: function(){ + $('.markdown').each(function(){ + $(this).html(marked($(this).html())); + }); + } + +}); + +window.SwaggerUi.Views = {}; + +// don't break backward compatibility with previous versions and warn users to upgrade their code +(function(){ + window.authorizations = { + add: function() { + warn('using window.authorizations is depreciated. Please use waggerUi.api.clientAuthorizations.add().'); + + if (typeof window.swaggerUi === 'undefined') { + throw new TypeError('window.swaggerUi is not defined'); + } + + if (window.swaggerUi instanceof SwaggerUi) { + window.swaggerUi.api.clientAuthorizations.add.apply(window.swaggerUi.api.clientAuthorizations, arguments); + } + } + }; + + window.ApiKeyAuthorization = function() { + warn('window.ApiKeyAuthorization is depreciated. Please use SwaggerClient.ApiKeyAuthorization.'); + SwaggerClient.ApiKeyAuthorization.apply(window, arguments); + }; + + window.PasswordAuthorization = function() { + warn('window.PasswordAuthorization is depreciated. Please use SwaggerClient.PasswordAuthorization.'); + SwaggerClient.PasswordAuthorization.apply(window, arguments); + }; + + function warn(message) { + if ('console' in window && typeof window.console.warn === 'function') { + console.warn(message); + } + } })(); this["Handlebars"] = this["Handlebars"] || {}; this["Handlebars"]["templates"] = this["Handlebars"]["templates"] || {}; @@ -267,246 +267,245 @@ this["Handlebars"]["templates"]["content_type"] = Handlebars.template({"1":funct if (stack1 != null) { buffer += stack1; } return buffer + "\n"; },"useData":true}); -'use strict'; - - -$(function() { - - // Helper function for vertically aligning DOM elements - // http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/ - $.fn.vAlign = function() { - return this.each(function(){ - var ah = $(this).height(); - var ph = $(this).parent().height(); - var mh = (ph - ah) / 2; - $(this).css('margin-top', mh); - }); - }; - - $.fn.stretchFormtasticInputWidthToParent = function() { - return this.each(function(){ - var p_width = $(this).closest("form").innerWidth(); - var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest('form').css('padding-right'), 10); - var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10); - $(this).css('width', p_width - p_padding - this_padding); - }); - }; - - $('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent(); - - // Vertically center these paragraphs - // Parent may need a min-height for this to work.. - $('ul.downplayed li div.content p').vAlign(); - - // When a sandbox form is submitted.. - $("form.sandbox").submit(function(){ - - var error_free = true; - - // Cycle through the forms required inputs - $(this).find("input.required").each(function() { - - // Remove any existing error styles from the input - $(this).removeClass('error'); - - // Tack the error style on if the input is empty.. - if ($(this).val() === '') { - $(this).addClass('error'); - $(this).wiggle(); - error_free = false; - } - - }); - - return error_free; - }); - -}); - -function clippyCopiedCallback() { - $('#api_key_copied').fadeIn().delay(1000).fadeOut(); - - // var b = $("#clippy_tooltip_" + a); - // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() { - // b.attr("title", "copy to clipboard") - // }, - // 500)) -} - -// Logging function that accounts for browsers that don't have window.console -function log(){ - log.history = log.history || []; - log.history.push(arguments); - if(this.console){ - console.log( Array.prototype.slice.call(arguments)[0] ); - } -} - -// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913) -if (Function.prototype.bind && console && typeof console.log === "object") { - [ - "log","info","warn","error","assert","dir","clear","profile","profileEnd" - ].forEach(function (method) { - console[method] = this.bind(console[method], console); - }, Function.prototype.call); -} - -window.Docs = { - - shebang: function() { - - // If shebang has an operation nickname in it.. - // e.g. /docs/#!/words/get_search - var fragments = $.param.fragment().split('/'); - fragments.shift(); // get rid of the bang - fragments = _.map(fragments, decodeURIComponent); // decode encoded paths - - switch (fragments.length) { - case 1: - // Expand all operations for the resource and scroll to it - var dom_id = 'resource_' + fragments[0]; - - Docs.expandEndpointListForResource(fragments[0]); - $('[id="' + dom_id + '"]').slideto({highlight: false}); - break; - case 2: - // Refer to the endpoint DOM element, e.g. #words_get_search - - // Expand Resource - Docs.expandEndpointListForResource(fragments[0]); - // $("#"+dom_id).slideto({highlight: false}); - - // Expand operation - var li_dom_id = fragments.join('_'); - var li_content_dom_id = li_dom_id + "_content"; - - - Docs.expandOperation($('[id="' + li_content_dom_id + '"]')); - $('[id="' + li_dom_id + '"]').slideto({highlight: false}); - break; - } - - }, - - toggleEndpointListForResource: function(resource) { - var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints'); - if (elem.is(':visible')) { - Docs.collapseEndpointListForResource(resource); - } else { - Docs.expandEndpointListForResource(resource); - } - }, - - // Expand resource - expandEndpointListForResource: function(resource) { - var resource = Docs.escapeResourceName(resource); - if (resource == '') { - $('.resource ul.endpoints').slideDown(); - return; - } - - $('li#resource_' + resource).addClass('active'); - - var elem = $('li#resource_' + resource + ' ul.endpoints'); - elem.slideDown(); - }, - - // Collapse resource and mark as explicitly closed - collapseEndpointListForResource: function(resource) { - var resource = Docs.escapeResourceName(resource); - if (resource == '') { - $('.resource ul.endpoints').slideUp(); - return; - } - - $('li#resource_' + resource).removeClass('active'); - - var elem = $('li#resource_' + resource + ' ul.endpoints'); - elem.slideUp(); - }, - - expandOperationsForResource: function(resource) { - // Make sure the resource container is open.. - Docs.expandEndpointListForResource(resource); - - if (resource == '') { - $('.resource ul.endpoints li.operation div.content').slideDown(); - return; - } - - $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() { - Docs.expandOperation($(this)); - }); - }, - - collapseOperationsForResource: function(resource) { - // Make sure the resource container is open.. - Docs.expandEndpointListForResource(resource); - - if (resource == '') { - $('.resource ul.endpoints li.operation div.content').slideUp(); - return; - } - - $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() { - Docs.collapseOperation($(this)); - }); - }, - - escapeResourceName: function(resource) { - return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&"); - }, - - expandOperation: function(elem) { - elem.slideDown(); - }, - - collapseOperation: function(elem) { - elem.slideUp(); - } -}; - -'use strict'; - -Handlebars.registerHelper('sanitize', function(html) { - // Strip the script tags from the html, and return it as a Handlebars.SafeString - html = html.replace(/)<[^<]*)*<\/script>/gi, ''); - return new Handlebars.SafeString(html); +'use strict'; + + +$(function() { + + // Helper function for vertically aligning DOM elements + // http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/ + $.fn.vAlign = function() { + return this.each(function(){ + var ah = $(this).height(); + var ph = $(this).parent().height(); + var mh = (ph - ah) / 2; + $(this).css('margin-top', mh); + }); + }; + + $.fn.stretchFormtasticInputWidthToParent = function() { + return this.each(function(){ + var p_width = $(this).closest("form").innerWidth(); + var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest('form').css('padding-right'), 10); + var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10); + $(this).css('width', p_width - p_padding - this_padding); + }); + }; + + $('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent(); + + // Vertically center these paragraphs + // Parent may need a min-height for this to work.. + $('ul.downplayed li div.content p').vAlign(); + + // When a sandbox form is submitted.. + $("form.sandbox").submit(function(){ + + var error_free = true; + + // Cycle through the forms required inputs + $(this).find("input.required").each(function() { + + // Remove any existing error styles from the input + $(this).removeClass('error'); + + // Tack the error style on if the input is empty.. + if ($(this).val() === '') { + $(this).addClass('error'); + $(this).wiggle(); + error_free = false; + } + + }); + + return error_free; + }); + +}); + +function clippyCopiedCallback() { + $('#api_key_copied').fadeIn().delay(1000).fadeOut(); + + // var b = $("#clippy_tooltip_" + a); + // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() { + // b.attr("title", "copy to clipboard") + // }, + // 500)) +} + +// Logging function that accounts for browsers that don't have window.console +function log(){ + log.history = log.history || []; + log.history.push(arguments); + if(this.console){ + console.log( Array.prototype.slice.call(arguments)[0] ); + } +} + +// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913) +if (Function.prototype.bind && console && typeof console.log === "object") { + [ + "log","info","warn","error","assert","dir","clear","profile","profileEnd" + ].forEach(function (method) { + console[method] = this.bind(console[method], console); + }, Function.prototype.call); +} + +window.Docs = { + + shebang: function() { + + // If shebang has an operation nickname in it.. + // e.g. /docs/#!/words/get_search + var fragments = $.param.fragment().split('/'); + fragments.shift(); // get rid of the bang + + switch (fragments.length) { + case 1: + // Expand all operations for the resource and scroll to it + var dom_id = 'resource_' + fragments[0]; + + Docs.expandEndpointListForResource(fragments[0]); + $("#"+dom_id).slideto({highlight: false}); + break; + case 2: + // Refer to the endpoint DOM element, e.g. #words_get_search + + // Expand Resource + Docs.expandEndpointListForResource(fragments[0]); + $("#"+dom_id).slideto({highlight: false}); + + // Expand operation + var li_dom_id = fragments.join('_'); + var li_content_dom_id = li_dom_id + "_content"; + + + Docs.expandOperation($('#'+li_content_dom_id)); + $('#'+li_dom_id).slideto({highlight: false}); + break; + } + + }, + + toggleEndpointListForResource: function(resource) { + var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints'); + if (elem.is(':visible')) { + Docs.collapseEndpointListForResource(resource); + } else { + Docs.expandEndpointListForResource(resource); + } + }, + + // Expand resource + expandEndpointListForResource: function(resource) { + var resource = Docs.escapeResourceName(resource); + if (resource == '') { + $('.resource ul.endpoints').slideDown(); + return; + } + + $('li#resource_' + resource).addClass('active'); + + var elem = $('li#resource_' + resource + ' ul.endpoints'); + elem.slideDown(); + }, + + // Collapse resource and mark as explicitly closed + collapseEndpointListForResource: function(resource) { + var resource = Docs.escapeResourceName(resource); + if (resource == '') { + $('.resource ul.endpoints').slideUp(); + return; + } + + $('li#resource_' + resource).removeClass('active'); + + var elem = $('li#resource_' + resource + ' ul.endpoints'); + elem.slideUp(); + }, + + expandOperationsForResource: function(resource) { + // Make sure the resource container is open.. + Docs.expandEndpointListForResource(resource); + + if (resource == '') { + $('.resource ul.endpoints li.operation div.content').slideDown(); + return; + } + + $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() { + Docs.expandOperation($(this)); + }); + }, + + collapseOperationsForResource: function(resource) { + // Make sure the resource container is open.. + Docs.expandEndpointListForResource(resource); + + if (resource == '') { + $('.resource ul.endpoints li.operation div.content').slideUp(); + return; + } + + $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() { + Docs.collapseOperation($(this)); + }); + }, + + escapeResourceName: function(resource) { + return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&"); + }, + + expandOperation: function(elem) { + elem.slideDown(); + }, + + collapseOperation: function(elem) { + elem.slideUp(); + } +}; + +'use strict'; + +Handlebars.registerHelper('sanitize', function(html) { + // Strip the script tags from the html, and return it as a Handlebars.SafeString + html = html.replace(/)<[^<]*)*<\/script>/gi, ''); + return new Handlebars.SafeString(html); }); this["Handlebars"]["templates"]["main"] = Handlebars.template({"1":function(depth0,helpers,partials,data) { var stack1, lambda=this.lambda, escapeExpression=this.escapeExpression, buffer = "
" + escapeExpression(lambda(((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.title : stack1), depth0)) - + "
\r\n
"; + + "
\n
"; stack1 = lambda(((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.description : stack1), depth0); if (stack1 != null) { buffer += stack1; } - buffer += "
\r\n"; + buffer += "\n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.externalDocs : depth0), {"name":"if","hash":{},"fn":this.program(2, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } buffer += " "; stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.termsOfServiceUrl : stack1), {"name":"if","hash":{},"fn":this.program(4, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "\r\n "; + buffer += "\n "; stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.name : stack1), {"name":"if","hash":{},"fn":this.program(6, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "\r\n "; + buffer += "\n "; stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1), {"name":"if","hash":{},"fn":this.program(8, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "\r\n "; + buffer += "\n "; stack1 = helpers['if'].call(depth0, ((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.email : stack1), {"name":"if","hash":{},"fn":this.program(10, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "\r\n "; + buffer += "\n "; stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1), {"name":"if","hash":{},"fn":this.program(12, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - return buffer + "\r\n"; + return buffer + "\n"; },"2":function(depth0,helpers,partials,data) { var stack1, lambda=this.lambda, escapeExpression=this.escapeExpression; - return "
More documentations
\r\n

" + return "

More documentations
\n

" + escapeExpression(lambda(((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.description : stack1), depth0)) - + "

\r\n \n " + escapeExpression(lambda(((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.url : stack1), depth0)) - + "\r\n"; + + "\n"; },"4":function(depth0,helpers,partials,data) { var stack1, lambda=this.lambda, escapeExpression=this.escapeExpression; return "
api version: " + escapeExpression(lambda(((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1), depth0)) - + "\r\n "; + + "\n "; },"16":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; return " \r\n \r\n"; + + "\">\n \n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "
\r\n"; + var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "
\n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.info : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "
\r\n
\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    [ base url: " + buffer += "

    \n
    \n
      \n\n
      \n
      \n
      \n

      [ base url: " + escapeExpression(((helper = (helper = helpers.basePath || (depth0 != null ? depth0.basePath : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"basePath","hash":{},"data":data}) : helper))) - + "\r\n"; + + "\n"; stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1), {"name":"if","hash":{},"fn":this.program(14, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - buffer += "]\r\n"; + buffer += "]\n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.validatorUrl : depth0), {"name":"if","hash":{},"fn":this.program(16, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - return buffer + "

      \r\n
      \r\n
      \r\n"; + return buffer + " \n
      \n
      \n"; },"useData":true}); this["Handlebars"]["templates"]["operation"] = Handlebars.template({"1":function(depth0,helpers,partials,data) { return "deprecated"; },"3":function(depth0,helpers,partials,data) { - return "

      Warning: Deprecated

      \r\n"; + return "

      Warning: Deprecated

      \n"; },"5":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, buffer = "

      Implementation Notes

      \r\n

      "; + var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, buffer = "

      Implementation Notes

      \n

      "; stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"description","hash":{},"data":data}) : helper)); if (stack1 != null) { buffer += stack1; } - return buffer + "

      \r\n"; + return buffer + "

      \n"; },"7":function(depth0,helpers,partials,data) { - return "
      \r\n "; + return "
      \n "; },"9":function(depth0,helpers,partials,data) { - var stack1, buffer = "
      \r\n"; + var stack1, buffer = "
      \n"; stack1 = helpers.each.call(depth0, depth0, {"name":"each","hash":{},"fn":this.program(10, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - return buffer + "
      \r\n"; + return buffer + "
      \n"; },"10":function(depth0,helpers,partials,data) { var stack1, lambda=this.lambda, escapeExpression=this.escapeExpression, buffer = "
      " + escapeExpression(lambda((depth0 != null ? depth0.scope : depth0), depth0)) - + "
      \r\n"; + + "
      \n"; },"12":function(depth0,helpers,partials,data) { return "
      "; },"14":function(depth0,helpers,partials,data) { - return "
      \r\n \r\n
      \r\n"; + return "
      \n \n
      \n"; },"16":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; return "

      Response Class (Status " + escapeExpression(((helper = (helper = helpers.successCode || (depth0 != null ? depth0.successCode : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"successCode","hash":{},"data":data}) : helper))) - + ")

      \r\n

      \r\n
      \r\n
      \r\n"; + + ")\n

      \n
      \n
      \n"; },"18":function(depth0,helpers,partials,data) { - return "

      Parameters

      \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
      ParameterValueDescriptionParameter TypeData Type
      \r\n"; + return "

      Parameters

      \n \n \n \n \n \n \n \n \n \n \n \n\n \n
      ParameterValueDescriptionParameter TypeData Type
      \n"; },"20":function(depth0,helpers,partials,data) { - return "
      \r\n

      Response Messages

      \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
      HTTP Status CodeReasonResponse ModelHeaders
      \r\n"; + return "
      \n

      Response Messages

      \n \n \n \n \n \n \n \n \n \n \n\n \n
      HTTP Status CodeReasonResponse ModelHeaders
      \n"; },"22":function(depth0,helpers,partials,data) { return ""; },"24":function(depth0,helpers,partials,data) { - return "
      \r\n \r\n \r\n \r\n
      \r\n"; + return "
      \n \n \n \n
      \n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, options, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, blockHelperMissing=helpers.blockHelperMissing, buffer = "\r\n \r\n
      \r\n \r\n \r\n \r\n"; + return buffer + " \n \n
      \n \n \n"; },"useData":true}); this["Handlebars"]["templates"]["param"] = Handlebars.template({"1":function(depth0,helpers,partials,data) { var stack1, buffer = ""; @@ -957,11 +956,11 @@ this["Handlebars"]["templates"]["resource"] = Handlebars.template({"1":function( return " : "; },"3":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return "
    • \r\n Raw\r\n
    • \r\n"; + + "'>Raw\n \n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, options, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, blockHelperMissing=helpers.blockHelperMissing, buffer = "
      \r\n

      \r\n \n

      \n Show/Hide\r\n \r\n
    • \r\n Show/Hide\n
    • \n
    • \n \r\n List Operations\r\n \r\n
    • \r\n
    • \r\n \n List Operations\n \n
    • \n
    • \n \r\n Expand Operations\r\n \r\n
    • \r\n"; + + "\">\n Expand Operations\n \n \n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.url : depth0), {"name":"if","hash":{},"fn":this.program(3, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - return buffer + " \r\n

      \r\n\r\n"; + + "_endpoint_list' style='display:none'>\n\n\n"; },"useData":true}); this["Handlebars"]["templates"]["response_content_type"] = Handlebars.template({"1":function(depth0,helpers,partials,data) { var stack1, buffer = ""; @@ -1021,1220 +1020,1220 @@ this["Handlebars"]["templates"]["signature"] = Handlebars.template({"compiler":[ },"useData":true}); this["Handlebars"]["templates"]["status_code"] = Handlebars.template({"1":function(depth0,helpers,partials,data) { var lambda=this.lambda, escapeExpression=this.escapeExpression; - return " \r\n " + return " \n " + escapeExpression(lambda((data && data.key), depth0)) - + "\r\n " + + "\n " + escapeExpression(lambda((depth0 != null ? depth0.description : depth0), depth0)) - + "\r\n " + + "\n " + escapeExpression(lambda((depth0 != null ? depth0.type : depth0), depth0)) - + "\r\n \r\n"; + + "\n \n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "" + escapeExpression(((helper = (helper = helpers.code || (depth0 != null ? depth0.code : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"code","hash":{},"data":data}) : helper))) - + "\r\n"; + + "\n"; stack1 = ((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"message","hash":{},"data":data}) : helper)); if (stack1 != null) { buffer += stack1; } - buffer += "\r\n\r\n\r\n \r\n \r\n"; + buffer += "\n\n"; + return buffer + " \n
      \n \n \n"; stack1 = helpers.each.call(depth0, (depth0 != null ? depth0.headers : depth0), {"name":"each","hash":{},"fn":this.program(1, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } - return buffer + " \r\n
      \r\n
      \n"; },"useData":true}); -'use strict'; - -SwaggerUi.Views.ApiKeyButton = Backbone.View.extend({ // TODO: append this to global SwaggerUi - - events:{ - 'click #apikey_button' : 'toggleApiKeyContainer', - 'click #apply_api_key' : 'applyApiKey' - }, - - initialize: function(opts){ - this.options = opts || {}; - this.router = this.options.router; - }, - - render: function(){ - var template = this.template(); - $(this.el).html(template(this.model)); - - return this; - }, - - - applyApiKey: function(){ - var keyAuth = new SwaggerClient.ApiKeyAuthorization( - this.model.name, - $('#input_apiKey_entry').val(), - this.model.in - ); - this.router.api.clientAuthorizations.add(this.model.name, keyAuth); - this.router.load(); - $('#apikey_container').show(); - }, - - toggleApiKeyContainer: function(){ - if ($('#apikey_container').length) { - - var elem = $('#apikey_container').first(); - - if (elem.is(':visible')){ - elem.hide(); - } else { - - // hide others - $('.auth_container').hide(); - elem.show(); - } - } - }, - - template: function(){ - return Handlebars.templates.apikey_button_view; - } - +'use strict'; + +SwaggerUi.Views.ApiKeyButton = Backbone.View.extend({ // TODO: append this to global SwaggerUi + + events:{ + 'click #apikey_button' : 'toggleApiKeyContainer', + 'click #apply_api_key' : 'applyApiKey' + }, + + initialize: function(opts){ + this.options = opts || {}; + this.router = this.options.router; + }, + + render: function(){ + var template = this.template(); + $(this.el).html(template(this.model)); + + return this; + }, + + + applyApiKey: function(){ + var keyAuth = new SwaggerClient.ApiKeyAuthorization( + this.model.name, + $('#input_apiKey_entry').val(), + this.model.in + ); + this.router.api.clientAuthorizations.add(this.model.name, keyAuth); + this.router.load(); + $('#apikey_container').show(); + }, + + toggleApiKeyContainer: function(){ + if ($('#apikey_container').length) { + + var elem = $('#apikey_container').first(); + + if (elem.is(':visible')){ + elem.hide(); + } else { + + // hide others + $('.auth_container').hide(); + elem.show(); + } + } + }, + + template: function(){ + return Handlebars.templates.apikey_button_view; + } + }); -'use strict'; - -SwaggerUi.Views.BasicAuthButton = Backbone.View.extend({ - - - initialize: function (opts) { - this.options = opts || {}; - this.router = this.options.router; - }, - - render: function(){ - var template = this.template(); - $(this.el).html(template(this.model)); - - return this; - }, - - events: { - 'click #basic_auth_button' : 'togglePasswordContainer', - 'click #apply_basic_auth' : 'applyPassword' - }, - - applyPassword: function(){ - var username = $('.input_username').val(); - var password = $('.input_password').val(); - var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password); - this.router.api.clientAuthorizations.add(this.model.type, basicAuth); - this.router.load(); - $('#basic_auth_container').hide(); - }, - - togglePasswordContainer: function(){ - if ($('#basic_auth_container').length) { - var elem = $('#basic_auth_container').show(); - if (elem.is(':visible')){ - elem.slideUp(); - } else { - // hide others - $('.auth_container').hide(); - elem.show(); - } - } - }, - - template: function(){ - return Handlebars.templates.basic_auth_button_view; - } - +'use strict'; + +SwaggerUi.Views.BasicAuthButton = Backbone.View.extend({ + + + initialize: function (opts) { + this.options = opts || {}; + this.router = this.options.router; + }, + + render: function(){ + var template = this.template(); + $(this.el).html(template(this.model)); + + return this; + }, + + events: { + 'click #basic_auth_button' : 'togglePasswordContainer', + 'click #apply_basic_auth' : 'applyPassword' + }, + + applyPassword: function(){ + var username = $('.input_username').val(); + var password = $('.input_password').val(); + var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password); + this.router.api.clientAuthorizations.add(this.model.type, basicAuth); + this.router.load(); + $('#basic_auth_container').hide(); + }, + + togglePasswordContainer: function(){ + if ($('#basic_auth_container').length) { + var elem = $('#basic_auth_container').show(); + if (elem.is(':visible')){ + elem.slideUp(); + } else { + // hide others + $('.auth_container').hide(); + elem.show(); + } + } + }, + + template: function(){ + return Handlebars.templates.basic_auth_button_view; + } + }); -'use strict'; - -SwaggerUi.Views.ContentTypeView = Backbone.View.extend({ - initialize: function() {}, - - render: function(){ - $(this.el).html(Handlebars.templates.content_type(this.model)); - - $('label[for=contentType]', $(this.el)).text('Response Content Type'); - - return this; - } +'use strict'; + +SwaggerUi.Views.ContentTypeView = Backbone.View.extend({ + initialize: function() {}, + + render: function(){ + $(this.el).html(Handlebars.templates.content_type(this.model)); + + $('label[for=contentType]', $(this.el)).text('Response Content Type'); + + return this; + } }); -'use strict'; - -SwaggerUi.Views.HeaderView = Backbone.View.extend({ - events: { - 'click #show-pet-store-icon' : 'showPetStore', - 'click #show-wordnik-dev-icon' : 'showWordnikDev', - 'click #explore' : 'showCustom', - 'keyup #input_baseUrl' : 'showCustomOnKeyup', - 'keyup #input_apiKey' : 'showCustomOnKeyup' - }, - - initialize: function(){}, - - showPetStore: function(){ - this.trigger('update-swagger-ui', { - url:'http://petstore.swagger.wordnik.com/api/api-docs' - }); - }, - - showWordnikDev: function(){ - this.trigger('update-swagger-ui', { - url: 'http://api.wordnik.com/v4/resources.json' - }); - }, - - showCustomOnKeyup: function(e){ - if (e.keyCode === 13) { - this.showCustom(); - } - }, - - showCustom: function(e){ - if (e) { - e.preventDefault(); - } - - this.trigger('update-swagger-ui', { - url: $('#input_baseUrl').val(), - apiKey: $('#input_apiKey').val() - }); - }, - - update: function(url, apiKey, trigger){ - if (trigger === undefined) { - trigger = false; - } - - $('#input_baseUrl').val(url); - - //$('#input_apiKey').val(apiKey); - if (trigger) { - this.trigger('update-swagger-ui', {url:url}); - } - } +'use strict'; + +SwaggerUi.Views.HeaderView = Backbone.View.extend({ + events: { + 'click #show-pet-store-icon' : 'showPetStore', + 'click #show-wordnik-dev-icon' : 'showWordnikDev', + 'click #explore' : 'showCustom', + 'keyup #input_baseUrl' : 'showCustomOnKeyup', + 'keyup #input_apiKey' : 'showCustomOnKeyup' + }, + + initialize: function(){}, + + showPetStore: function(){ + this.trigger('update-swagger-ui', { + url:'http://petstore.swagger.wordnik.com/api/api-docs' + }); + }, + + showWordnikDev: function(){ + this.trigger('update-swagger-ui', { + url: 'http://api.wordnik.com/v4/resources.json' + }); + }, + + showCustomOnKeyup: function(e){ + if (e.keyCode === 13) { + this.showCustom(); + } + }, + + showCustom: function(e){ + if (e) { + e.preventDefault(); + } + + this.trigger('update-swagger-ui', { + url: $('#input_baseUrl').val(), + apiKey: $('#input_apiKey').val() + }); + }, + + update: function(url, apiKey, trigger){ + if (trigger === undefined) { + trigger = false; + } + + $('#input_baseUrl').val(url); + + //$('#input_apiKey').val(apiKey); + if (trigger) { + this.trigger('update-swagger-ui', {url:url}); + } + } }); -'use strict'; - -SwaggerUi.Views.MainView = Backbone.View.extend({ - - // TODO: sorters were not used in any place, do we need them? - // sorters = { - // alpha : function(a,b){ return a.path.localeCompare(b.path); }, - // method : function(a,b){ return a.method.localeCompare(b.method); }, - // }, - - initialize: function(opts){ - opts = opts || {}; - - this.router = opts.router; - - // set up the UI for input - this.model.auths = []; - var key, value; - - for (key in this.model.securityDefinitions) { - value = this.model.securityDefinitions[key]; - - this.model.auths.push({ - name: key, - type: value.type, - value: value - }); - } - - if (this.model.swaggerVersion === '2.0') { - if ('validatorUrl' in opts.swaggerOptions) { - - // Validator URL specified explicitly - this.model.validatorUrl = opts.swaggerOptions.validatorUrl; - - } else if (this.model.url.indexOf('localhost') > 0) { - - // Localhost override - this.model.validatorUrl = null; - - } else { - - // Default validator - this.model.validatorUrl = 'http://online.swagger.io/validator'; - } - } - }, - - render: function(){ - if (this.model.securityDefinitions) { - for (var name in this.model.securityDefinitions) { - var auth = this.model.securityDefinitions[name]; - var button; - - if (auth.type === 'apiKey' && $('#apikey_button').length === 0) { - button = new SwaggerUi.Views.ApiKeyButton({model: auth, router: this.router}).render().el; - $('.auth_main_container').append(button); - } - - if (auth.type === 'basicAuth' && $('#basic_auth_button').length === 0) { - button = new SwaggerUi.Views.BasicAuthButton({model: auth, router: this.router}).render().el; - $('.auth_main_container').append(button); - } - } - } - - // Render the outer container for resources - $(this.el).html(Handlebars.templates.main(this.model)); - - // Render each resource - - var resources = {}; - var counter = 0; - for (var i = 0; i < this.model.apisArray.length; i++) { - var resource = this.model.apisArray[i]; - var id = resource.name; - while (typeof resources[id] !== 'undefined') { - id = id + '_' + counter; - counter += 1; - } - resource.id = id; - resources[id] = resource; - this.addResource(resource, this.model.auths); - } - - $('.propWrap').hover(function onHover(){ - $('.optionsWrapper', $(this)).show(); - }, function offhover(){ - $('.optionsWrapper', $(this)).hide(); - }); - return this; - }, - - addResource: function(resource, auths){ - // Render a resource and add it to resources li - resource.id = resource.id.replace(/\s/g, '_'); - var resourceView = new SwaggerUi.Views.ResourceView({ - model: resource, - router: this.router, - tagName: 'li', - id: 'resource_' + resource.id, - className: 'resource', - auths: auths, - swaggerOptions: this.options.swaggerOptions - }); - $('#resources').append(resourceView.render().el); - }, - - clear: function(){ - $(this.el).html(''); - } +'use strict'; + +SwaggerUi.Views.MainView = Backbone.View.extend({ + + // TODO: sorters were not used in any place, do we need them? + // sorters = { + // alpha : function(a,b){ return a.path.localeCompare(b.path); }, + // method : function(a,b){ return a.method.localeCompare(b.method); }, + // }, + + initialize: function(opts){ + opts = opts || {}; + + this.router = opts.router; + + // set up the UI for input + this.model.auths = []; + var key, value; + + for (key in this.model.securityDefinitions) { + value = this.model.securityDefinitions[key]; + + this.model.auths.push({ + name: key, + type: value.type, + value: value + }); + } + + if (this.model.swaggerVersion === '2.0') { + if ('validatorUrl' in opts.swaggerOptions) { + + // Validator URL specified explicitly + this.model.validatorUrl = opts.swaggerOptions.validatorUrl; + + } else if (this.model.url.indexOf('localhost') > 0) { + + // Localhost override + this.model.validatorUrl = null; + + } else { + + // Default validator + this.model.validatorUrl = 'http://online.swagger.io/validator'; + } + } + }, + + render: function(){ + if (this.model.securityDefinitions) { + for (var name in this.model.securityDefinitions) { + var auth = this.model.securityDefinitions[name]; + var button; + + if (auth.type === 'apiKey' && $('#apikey_button').length === 0) { + button = new SwaggerUi.Views.ApiKeyButton({model: auth, router: this.router}).render().el; + $('.auth_main_container').append(button); + } + + if (auth.type === 'basicAuth' && $('#basic_auth_button').length === 0) { + button = new SwaggerUi.Views.BasicAuthButton({model: auth, router: this.router}).render().el; + $('.auth_main_container').append(button); + } + } + } + + // Render the outer container for resources + $(this.el).html(Handlebars.templates.main(this.model)); + + // Render each resource + + var resources = {}; + var counter = 0; + for (var i = 0; i < this.model.apisArray.length; i++) { + var resource = this.model.apisArray[i]; + var id = resource.name; + while (typeof resources[id] !== 'undefined') { + id = id + '_' + counter; + counter += 1; + } + resource.id = id; + resources[id] = resource; + this.addResource(resource, this.model.auths); + } + + $('.propWrap').hover(function onHover(){ + $('.optionsWrapper', $(this)).show(); + }, function offhover(){ + $('.optionsWrapper', $(this)).hide(); + }); + return this; + }, + + addResource: function(resource, auths){ + // Render a resource and add it to resources li + resource.id = resource.id.replace(/\s/g, '_'); + var resourceView = new SwaggerUi.Views.ResourceView({ + model: resource, + router: this.router, + tagName: 'li', + id: 'resource_' + resource.id, + className: 'resource', + auths: auths, + swaggerOptions: this.options.swaggerOptions + }); + $('#resources').append(resourceView.render().el); + }, + + clear: function(){ + $(this.el).html(''); + } }); -'use strict'; - -SwaggerUi.Views.OperationView = Backbone.View.extend({ - invocationUrl: null, - - events: { - 'submit .sandbox' : 'submitOperation', - 'click .submit' : 'submitOperation', - 'click .response_hider' : 'hideResponse', - 'click .toggleOperation' : 'toggleOperationContent', - 'mouseenter .api-ic' : 'mouseEnter', - 'mouseout .api-ic' : 'mouseExit', - }, - - initialize: function(opts) { - opts = opts || {}; - this.router = opts.router; - this.auths = opts.auths; - this.parentId = this.model.parentId; - this.nickname = this.model.nickname; - this.model.encodedParentId = encodeURIComponent(this.parentId); - return this; - }, - - mouseEnter: function(e) { - var elem = $(this.el).find('.content'); - var x = e.pageX; - var y = e.pageY; - var scX = $(window).scrollLeft(); - var scY = $(window).scrollTop(); - var scMaxX = scX + $(window).width(); - var scMaxY = scY + $(window).height(); - var wd = elem.width(); - var hgh = elem.height(); - - if (x + wd > scMaxX) { - x = scMaxX - wd; - } - - if (x < scX) { - x = scX; - } - - if (y + hgh > scMaxY) { - y = scMaxY - hgh; - } - - if (y < scY) { - y = scY; - } - - var pos = {}; - pos.top = y; - pos.left = x; - elem.css(pos); - $(e.currentTarget.parentNode).find('#api_information_panel').show(); - }, - - mouseExit: function(e) { - $(e.currentTarget.parentNode).find('#api_information_panel').hide(); - }, - - // Note: copied from CoffeeScript compiled file - // TODO: redactor - render: function() { - var a, auth, auths, code, contentTypeModel, isMethodSubmissionSupported, k, key, l, len, len1, len2, len3, len4, m, modelAuths, n, o, p, param, q, ref, ref1, ref2, ref3, ref4, ref5, responseContentTypeView, responseSignatureView, schema, schemaObj, scopeIndex, signatureModel, statusCode, successResponse, type, v, value; - isMethodSubmissionSupported = jQuery.inArray(this.model.method, this.model.supportedSubmitMethods()) >= 0; - if (!isMethodSubmissionSupported) { - this.model.isReadOnly = true; - } - this.model.description = this.model.description || this.model.notes; - if (this.model.description) { - this.model.description = this.model.description.replace(/(?:\r\n|\r|\n)/g, '
      '); - } - this.model.oauth = null; - modelAuths = this.model.authorizations || this.model.security; - if (modelAuths) { - if (Array.isArray(modelAuths)) { - for (l = 0, len = modelAuths.length; l < len; l++) { - auths = modelAuths[l]; - for (key in auths) { - auth = auths[key]; - for (a in this.auths) { - auth = this.auths[a]; - if (auth.type === 'oauth2') { - this.model.oauth = {}; - this.model.oauth.scopes = []; - ref1 = auth.value.scopes; - for (k in ref1) { - v = ref1[k]; - scopeIndex = auths[key].indexOf(k); - if (scopeIndex >= 0) { - o = { - scope: k, - description: v - }; - this.model.oauth.scopes.push(o); - } - } - } - } - } - } - } else { - for (k in modelAuths) { - v = modelAuths[k]; - if (k === 'oauth2') { - if (this.model.oauth === null) { - this.model.oauth = {}; - } - if (this.model.oauth.scopes === void 0) { - this.model.oauth.scopes = []; - } - for (m = 0, len1 = v.length; m < len1; m++) { - o = v[m]; - this.model.oauth.scopes.push(o); - } - } - } - } - } - if (typeof this.model.responses !== 'undefined') { - this.model.responseMessages = []; - ref2 = this.model.responses; - for (code in ref2) { - value = ref2[code]; - schema = null; - schemaObj = this.model.responses[code].schema; - if (schemaObj && schemaObj.$ref) { - schema = schemaObj.$ref; - if (schema.indexOf('#/definitions/') === 0) { - schema = schema.substring('#/definitions/'.length); - } - } - this.model.responseMessages.push({ - code: code, - message: value.description, - responseModel: schema - }); - } - } - if (typeof this.model.responseMessages === 'undefined') { - this.model.responseMessages = []; - } - signatureModel = null; - if (this.model.successResponse) { - successResponse = this.model.successResponse; - for (key in successResponse) { - value = successResponse[key]; - this.model.successCode = key; - if (typeof value === 'object' && typeof value.createJSONSample === 'function') { - signatureModel = { - sampleJSON: JSON.stringify(value.createJSONSample(), void 0, 2), - isParam: false, - signature: value.getMockSignature() - }; - } - } - } else if (this.model.responseClassSignature && this.model.responseClassSignature !== 'string') { - signatureModel = { - sampleJSON: this.model.responseSampleJSON, - isParam: false, - signature: this.model.responseClassSignature - }; - } - $(this.el).html(Handlebars.templates.operation(this.model)); - if (signatureModel) { - responseSignatureView = new SwaggerUi.Views.SignatureView({ - model: signatureModel, - router: this.router, - tagName: 'div' - }); - $('.model-signature', $(this.el)).append(responseSignatureView.render().el); - } else { - this.model.responseClassSignature = 'string'; - $('.model-signature', $(this.el)).html(this.model.type); - } - contentTypeModel = { - isParam: false - }; - contentTypeModel.consumes = this.model.consumes; - contentTypeModel.produces = this.model.produces; - ref3 = this.model.parameters; - for (n = 0, len2 = ref3.length; n < len2; n++) { - param = ref3[n]; - type = param.type || param.dataType || ''; - if (typeof type === 'undefined') { - schema = param.schema; - if (schema && schema.$ref) { - ref = schema.$ref; - if (ref.indexOf('#/definitions/') === 0) { - type = ref.substring('#/definitions/'.length); - } else { - type = ref; - } - } - } - if (type && type.toLowerCase() === 'file') { - if (!contentTypeModel.consumes) { - contentTypeModel.consumes = 'multipart/form-data'; - } - } - param.type = type; - } - responseContentTypeView = new SwaggerUi.Views.ResponseContentTypeView({ - model: contentTypeModel, - router: this.router - }); - $('.response-content-type', $(this.el)).append(responseContentTypeView.render().el); - ref4 = this.model.parameters; - for (p = 0, len3 = ref4.length; p < len3; p++) { - param = ref4[p]; - this.addParameter(param, contentTypeModel.consumes); - } - ref5 = this.model.responseMessages; - for (q = 0, len4 = ref5.length; q < len4; q++) { - statusCode = ref5[q]; - this.addStatusCode(statusCode); - } - return this; - }, - - addParameter: function(param, consumes) { - // Render a parameter - param.consumes = consumes; - var paramView = new SwaggerUi.Views.ParameterView({ - model: param, - tagName: 'tr', - readOnly: this.model.isReadOnly - }); - $('.operation-params', $(this.el)).append(paramView.render().el); - }, - - addStatusCode: function(statusCode) { - // Render status codes - var statusCodeView = new SwaggerUi.Views.StatusCodeView({ - model: statusCode, - tagName: 'tr', - router: this.router - }); - $('.operation-status', $(this.el)).append(statusCodeView.render().el); - }, - - // Note: copied from CoffeeScript compiled file - // TODO: redactor - submitOperation: function(e) { - var error_free, form, isFileUpload, l, len, len1, len2, m, map, n, o, opts, ref1, ref2, ref3, val; - if (e !== null) { - e.preventDefault(); - } - form = $('.sandbox', $(this.el)); - error_free = true; - form.find('input.required').each(function() { - $(this).removeClass('error'); - if (jQuery.trim($(this).val()) === '') { - $(this).addClass('error'); - $(this).wiggle({ - callback: (function(_this) { - return function() { - $(_this).focus(); - }; - })(this) - }); - error_free = false; - } - }); - form.find('textarea.required').each(function() { - $(this).removeClass('error'); - if (jQuery.trim($(this).val()) === '') { - $(this).addClass('error'); - $(this).wiggle({ - callback: (function(_this) { - return function() { - return $(_this).focus(); - }; - })(this) - }); - error_free = false; - } - }); - if (error_free) { - map = {}; - opts = { - parent: this - }; - isFileUpload = false; - ref1 = form.find('input'); - for (l = 0, len = ref1.length; l < len; l++) { - o = ref1[l]; - if ((o.value !== null) && jQuery.trim(o.value).length > 0) { - map[o.name] = o.value; - } - if (o.type === 'file') { - map[o.name] = o.files[0]; - isFileUpload = true; - } - } - ref2 = form.find('textarea'); - for (m = 0, len1 = ref2.length; m < len1; m++) { - o = ref2[m]; - if ((o.value !== null) && jQuery.trim(o.value).length > 0) { - map[o.name] = o.value; - } - } - ref3 = form.find('select'); - for (n = 0, len2 = ref3.length; n < len2; n++) { - o = ref3[n]; - val = this.getSelectedValue(o); - if ((val !== null) && jQuery.trim(val).length > 0) { - map[o.name] = val; - } - } - opts.responseContentType = $('div select[name=responseContentType]', $(this.el)).val(); - opts.requestContentType = $('div select[name=parameterContentType]', $(this.el)).val(); - $('.response_throbber', $(this.el)).show(); - if (isFileUpload) { - return this.handleFileUpload(map, form); - } else { - return this.model['do'](map, opts, this.showCompleteStatus, this.showErrorStatus, this); - } - } - }, - - success: function(response, parent) { - parent.showCompleteStatus(response); - }, - - // Note: This is compiled code - // TODO: Refactor - handleFileUpload: function(map, form) { - var bodyParam, el, headerParams, l, len, len1, len2, len3, m, n, o, obj, p, param, params, ref1, ref2, ref3, ref4; - ref1 = form.serializeArray(); - for (l = 0, len = ref1.length; l < len; l++) { - o = ref1[l]; - if ((o.value !== null) && jQuery.trim(o.value).length > 0) { - map[o.name] = o.value; - } - } - bodyParam = new FormData(); - params = 0; - ref2 = this.model.parameters; - for (m = 0, len1 = ref2.length; m < len1; m++) { - param = ref2[m]; - if (param.paramType === 'form' || param['in'] === 'formData') { - if (param.type.toLowerCase() !== 'file' && map[param.name] !== void 0) { - bodyParam.append(param.name, map[param.name]); - } - } - } - headerParams = {}; - ref3 = this.model.parameters; - for (n = 0, len2 = ref3.length; n < len2; n++) { - param = ref3[n]; - if (param.paramType === 'header') { - headerParams[param.name] = map[param.name]; - } - } - ref4 = form.find('input[type~="file"]'); - for (p = 0, len3 = ref4.length; p < len3; p++) { - el = ref4[p]; - if (typeof el.files[0] !== 'undefined') { - bodyParam.append($(el).attr('name'), el.files[0]); - params += 1; - } - } - this.invocationUrl = this.model.supportHeaderParams() ? (headerParams = this.model.getHeaderParams(map), delete headerParams['Content-Type'], this.model.urlify(map, false)) : this.model.urlify(map, true); - $('.request_url', $(this.el)).html('
      ');
      -    $('.request_url pre', $(this.el)).text(this.invocationUrl);
      -    obj = {
      -      type: this.model.method,
      -      url: this.invocationUrl,
      -      headers: headerParams,
      -      data: bodyParam,
      -      dataType: 'json',
      -      contentType: false,
      -      processData: false,
      -      error: (function(_this) {
      -        return function(data) {
      -          return _this.showErrorStatus(_this.wrap(data), _this);
      -        };
      -      })(this),
      -      success: (function(_this) {
      -        return function(data) {
      -          return _this.showResponse(data, _this);
      -        };
      -      })(this),
      -      complete: (function(_this) {
      -        return function(data) {
      -          return _this.showCompleteStatus(_this.wrap(data), _this);
      -        };
      -      })(this)
      -    };
      -    if (window.authorizations) {
      -      window.authorizations.apply(obj);
      -    }
      -    jQuery.ajax(obj);
      -    return false;
      -    // end of file-upload nastiness
      -  },
      -  // wraps a jquery response as a shred response
      -
      -  wrap: function(data) {
      -   var h, headerArray, headers, i, l, len, o;
      -    headers = {};
      -    headerArray = data.getAllResponseHeaders().split('\r');
      -    for (l = 0, len = headerArray.length; l < len; l++) {
      -      i = headerArray[l];
      -      h = i.match(/^([^:]*?):(.*)$/);
      -      if (!h) {
      -        h = [];
      -      }
      -      h.shift();
      -      if (h[0] !== void 0 && h[1] !== void 0) {
      -        headers[h[0].trim()] = h[1].trim();
      -      }
      -    }
      -    o = {};
      -    o.content = {};
      -    o.content.data = data.responseText;
      -    o.headers = headers;
      -    o.request = {};
      -    o.request.url = this.invocationUrl;
      -    o.status = data.status;
      -    return o;
      -  },
      -
      -  getSelectedValue: function(select) {
      -    if (!select.multiple) {
      -      return select.value;
      -    } else {
      -      var options = [];
      -      for (var l = 0, len = select.options.length; l < len; l++) {
      -        var opt = select.options[l];
      -        if (opt.selected) {
      -          options.push(opt.value);
      -        }
      -      }
      -      if (options.length > 0) {
      -        return options;
      -      } else {
      -        return null;
      -      }
      -    }
      -  },
      -
      -  // handler for hide response link
      -  hideResponse: function(e) {
      -    if (e) { e.preventDefault(); }
      -    $('.response', $(this.el)).slideUp();
      -    $('.response_hider', $(this.el)).fadeOut();
      -  },
      -
      -  // Show response from server
      -  showResponse: function(response) {
      -    var prettyJson = JSON.stringify(response, null, '\t').replace(/\n/g, '
      '); - $('.response_body', $(this.el)).html(_.escape(prettyJson)); - }, - - // Show error from server - showErrorStatus: function(data, parent) { - parent.showStatus(data); - }, - - // show the status codes - showCompleteStatus: function(data, parent){ - parent.showStatus(data); - }, - - // Adapted from http://stackoverflow.com/a/2893259/454004 - // Note: directly ported from CoffeeScript - // TODO: Cleanup CoffeeScript artifacts - formatXml: function(xml) { - var contexp, fn, formatted, indent, l, lastType, len, lines, ln, pad, reg, transitions, wsexp; - reg = /(>)(<)(\/*)/g; - wsexp = /[ ]*(.*)[ ]+\n/g; - contexp = /(<.+>)(.+\n)/g; - xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2'); - pad = 0; - formatted = ''; - lines = xml.split('\n'); - indent = 0; - lastType = 'other'; - transitions = { - 'single->single': 0, - 'single->closing': -1, - 'single->opening': 0, - 'single->other': 0, - 'closing->single': 0, - 'closing->closing': -1, - 'closing->opening': 0, - 'closing->other': 0, - 'opening->single': 1, - 'opening->closing': 0, - 'opening->opening': 1, - 'opening->other': 1, - 'other->single': 0, - 'other->closing': -1, - 'other->opening': 0, - 'other->other': 0 - }; - fn = function(ln) { - var fromTo, j, key, padding, type, types, value; - types = { - single: Boolean(ln.match(/<.+\/>/)), - closing: Boolean(ln.match(/<\/.+>/)), - opening: Boolean(ln.match(/<[^!?].*>/)) - }; - type = ((function() { - var results; - results = []; - for (key in types) { - value = types[key]; - if (value) { - results.push(key); - } - } - return results; - })())[0]; - type = type === void 0 ? 'other' : type; - fromTo = lastType + '->' + type; - lastType = type; - padding = ''; - indent += transitions[fromTo]; - padding = ((function() { - var m, ref1, results; - results = []; - for (j = m = 0, ref1 = indent; 0 <= ref1 ? m < ref1 : m > ref1; j = 0 <= ref1 ? ++m : --m) { - results.push(' '); - } - return results; - })()).join(''); - if (fromTo === 'opening->closing') { - formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'; - } else { - formatted += padding + ln + '\n'; - } - }; - for (l = 0, len = lines.length; l < len; l++) { - ln = lines[l]; - fn(ln); - } - return formatted; - }, - - // puts the response data in UI - showStatus: function(response) { - var url, content; - if (response.content === undefined) { - content = response.data; - url = response.url; - } else { - content = response.content.data; - url = response.request.url; - } - var headers = response.headers; - - // if server is nice, and sends content-type back, we can use it - var contentType = null; - if (headers) { - contentType = headers['Content-Type'] || headers['content-type']; - if (contentType) { - contentType = contentType.split(';')[0].trim(); - } - } - $('.response_body', $(this.el)).removeClass('json'); - $('.response_body', $(this.el)).removeClass('xml'); - - var supportsAudioPlayback = function(contentType){ - var audioElement = document.createElement('audio'); - return !!(audioElement.canPlayType && audioElement.canPlayType(contentType).replace(/no/, '')); - }; - - var pre; - var code; - if (!content) { - code = $('').text('no content'); - pre = $('
      ').append(code);
      -    } else if (contentType === 'application/json' || /\+json$/.test(contentType)) {
      -      var json = null;
      -      try {
      -        json = JSON.stringify(JSON.parse(content), null, '  ');
      -      } catch (_error) {
      -        json = 'can\'t parse JSON.  Raw result:\n\n' + content;
      -      }
      -      code = $('').text(json);
      -      pre = $('
      ').append(code);
      -    } else if (contentType === 'application/xml' || /\+xml$/.test(contentType)) {
      -      code = $('').text(this.formatXml(content));
      -      pre = $('
      ').append(code);
      -    } else if (contentType === 'text/html') {
      -      code = $('').html(_.escape(content));
      -      pre = $('
      ').append(code);
      -    } else if (/^image\//.test(contentType)) {
      -      pre = $('').attr('src', url);
      -    } else if (/^audio\//.test(contentType) && supportsAudioPlayback(contentType)) {
      -      pre = $('