diff --git a/dist/swagger-ui.js b/dist/swagger-ui.js
index 7d08a18c..13423330 100644
--- a/dist/swagger-ui.js
+++ b/dist/swagger-ui.js
@@ -1,578 +1,308 @@
/**
* swagger-ui - Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API
- * @version v2.1.0
+ * @version v2.1.1
* @link http://swagger.io
* @license Apache-2.0
*/
-(function(){'use strict';
-
-window.SwaggerUi = Backbone.Router.extend({
+(function(){this["Handlebars"] = this["Handlebars"] || {};
+this["Handlebars"]["templates"] = this["Handlebars"]["templates"] || {};
+this["Handlebars"]["templates"]["apikey_button_view"] = Handlebars.template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+ var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
+ return "\n
\n";
+},"useData":true});
+this["Handlebars"]["templates"]["basic_auth_button_view"] = Handlebars.template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
+ return "\n\n\n";
+ },"useData":true});
+this["Handlebars"]["templates"]["content_type"] = Handlebars.template({"1":function(depth0,helpers,partials,data) {
+ var stack1, buffer = "";
+ stack1 = helpers.each.call(depth0, (depth0 != null ? depth0.produces : depth0), {"name":"each","hash":{},"fn":this.program(2, data),"inverse":this.noop,"data":data});
+ if (stack1 != null) { buffer += stack1; }
+ return buffer;
+},"2":function(depth0,helpers,partials,data) {
+ var stack1, lambda=this.lambda, buffer = " \n";
+},"4":function(depth0,helpers,partials,data) {
+ return " \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 = "\n\n";
+},"useData":true});
+'use strict';
- dom_id: 'swagger_ui',
- // Attributes
- options: null,
- api: null,
- headerView: null,
- mainView: null,
+$(function() {
- // SwaggerUi accepts all the same options as SwaggerApi
- initialize: function(options) {
- options = options || {};
- if(!options.highlightSizeThreshold) {
- options.highlightSizeThreshold = 100000;
- }
+ // 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);
+ });
+ };
- // Allow dom_id to be overridden
- if (options.dom_id) {
- this.dom_id = options.dom_id;
- delete options.dom_id;
- }
+ $.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);
+ });
+ };
- if (!options.supportedSubmitMethods){
- options.supportedSubmitMethods = [
- 'get',
- 'put',
- 'post',
- 'delete',
- 'head',
- 'options',
- 'patch'
- ];
- }
+ $('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent();
- if (typeof options.oauth2RedirectUrl === 'string') {
- window.oAuthRedirectUrl = options.redirectUrl;
- }
+ // Vertically center these paragraphs
+ // Parent may need a min-height for this to work..
+ $('ul.downplayed li div.content p').vAlign();
- // Create an empty div which contains the dom_id
- if (! $('#' + this.dom_id).length){
- $('body').append('') ;
- }
+ // When a sandbox form is submitted..
+ $("form.sandbox").submit(function(){
- this.options = options;
+ var error_free = true;
- // set marked options
- marked.setOptions({gfm: true});
+ // Cycle through the forms required inputs
+ $(this).find("input.required").each(function() {
- // 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); };
+ // Remove any existing error styles from the input
+ $(this).removeClass('error');
- // Create view to handle the header inputs
- this.headerView = new SwaggerUi.Views.HeaderView({el: $('#header')});
+ // Tack the error style on if the input is empty..
+ if ($(this).val() === '') {
+ $(this).addClass('error');
+ $(this).wiggle();
+ error_free = false;
+ }
- // 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;
- },
+ return error_free;
+ });
- // 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();
- },
+function clippyCopiedCallback() {
+ $('#api_key_copied').fadeIn().delay(1000).fadeOut();
- // 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);
- }
- if(this.api) {
- this.options.authorizations = this.api.clientAuthorizations.authz;
- }
- this.options.url = url;
- this.headerView.update(url);
+ // var b = $("#clippy_tooltip_" + a);
+ // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() {
+ // b.attr("title", "copy to clipboard")
+ // },
+ // 500))
+}
- this.api = new SwaggerClient(this.options);
- },
+// 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] );
+ }
+}
- // collapse all sections
- collapseAll: function(){
- Docs.collapseEndpointListForResource('');
- },
+// 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);
+}
- // list operations for all sections
- listAll: function(){
- Docs.collapseOperationsForResource('');
- },
+window.Docs = {
- // expand operations for all sections
- expandAll: function(){
- Docs.expandOperationsForResource('');
- },
+ shebang: function() {
- // 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 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
- if (this.options.onComplete){
- this.options.onComplete(this.api, this);
- }
+ switch (fragments.length) {
+ case 1:
+ if (fragments[0].length > 0) { // prevent matching "#/"
+ // Expand all operations for the resource and scroll to it
+ var dom_id = 'resource_' + fragments[0];
- setTimeout(Docs.shebang.bind(this), 100);
- },
+ Docs.expandEndpointListForResource(fragments[0]);
+ $("#"+dom_id).slideto({highlight: false});
+ }
+ break;
+ case 2:
+ // Refer to the endpoint DOM element, e.g. #words_get_search
- 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;
+ // Expand Resource
+ Docs.expandEndpointListForResource(fragments[0]);
+ $("#"+dom_id).slideto({highlight: false});
- if (base.indexOf('?') > -1){
- endOfPath = Math.min(endOfPath, base.indexOf('?'));
- }
+ // Expand operation
+ var li_dom_id = fragments.join('_');
+ var li_content_dom_id = li_dom_id + "_content";
- if (base.indexOf('#') > -1){
- endOfPath = Math.min(endOfPath, base.indexOf('#'));
- }
- base = base.substring(0, endOfPath);
+ Docs.expandOperation($('#'+li_content_dom_id));
+ $('#'+li_dom_id).slideto({highlight: false});
+ break;
+ }
- if (base.indexOf('/', base.length - 1 ) !== -1){
- return base + url;
- }
+ },
- return base + '/' + url;
- }
- },
+ toggleEndpointListForResource: function(resource) {
+ var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints');
+ if (elem.is(':visible')) {
+ Docs.collapseEndpointListForResource(resource);
+ } else {
+ Docs.expandEndpointListForResource(resource);
+ }
+ },
- // Shows message on topbar of the ui
- showMessage: function(data){
- if (data === undefined) {
- data = '';
- }
- var $msgbar = $('#message-bar');
- $msgbar.removeClass('message-fail');
- $msgbar.addClass('message-success');
- $msgbar.html(data);
- if(window.SwaggerTranslator) {
- window.SwaggerTranslator.translate($msgbar);
- }
- },
+ // Expand resource
+ expandEndpointListForResource: function(resource) {
+ var resource = Docs.escapeResourceName(resource);
+ if (resource == '') {
+ $('.resource ul.endpoints').slideDown();
+ return;
+ }
- // shows message in red
- onLoadFailure: function(data){
- if (data === undefined) {
- data = '';
- }
- $('#message-bar').removeClass('message-success');
- $('#message-bar').addClass('message-fail');
+ $('li#resource_' + resource).addClass('active');
- var val = $('#message-bar').text(data);
+ var elem = $('li#resource_' + resource + ' ul.endpoints');
+ elem.slideDown();
+ },
- if (this.options.onFailure) {
- this.options.onFailure(data);
- }
+ // Collapse resource and mark as explicitly closed
+ collapseEndpointListForResource: function(resource) {
+ var resource = Docs.escapeResourceName(resource);
+ if (resource == '') {
+ $('.resource ul.endpoints').slideUp();
+ return;
+ }
- return val;
- },
+ $('li#resource_' + resource).removeClass('active');
- // Renders GFM for elements with 'markdown' class
- renderGFM: function(){
- $('.markdown').each(function(){
- $(this).html(marked($(this).html()));
- });
+ var elem = $('li#resource_' + resource + ' ul.endpoints');
+ elem.slideUp();
+ },
- $('.propDesc', '.model-signature .description').each(function () {
- $(this).html(marked($(this).html())).addClass('markdown');
- });
- }
+ expandOperationsForResource: function(resource) {
+ // Make sure the resource container is open..
+ Docs.expandEndpointListForResource(resource);
-});
+ if (resource == '') {
+ $('.resource ul.endpoints li.operation div.content').slideDown();
+ return;
+ }
-window.SwaggerUi.Views = {};
+ $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
+ Docs.expandOperation($(this));
+ });
+ },
-// 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 deprecated. Please use SwaggerUi.api.clientAuthorizations.add().');
+ collapseOperationsForResource: function(resource) {
+ // Make sure the resource container is open..
+ Docs.expandEndpointListForResource(resource);
- if (typeof window.swaggerUi === 'undefined') {
- throw new TypeError('window.swaggerUi is not defined');
- }
+ if (resource == '') {
+ $('.resource ul.endpoints li.operation div.content').slideUp();
+ return;
+ }
- if (window.swaggerUi instanceof SwaggerUi) {
- window.swaggerUi.api.clientAuthorizations.add.apply(window.swaggerUi.api.clientAuthorizations, arguments);
- }
- }
- };
+ $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
+ Docs.collapseOperation($(this));
+ });
+ },
- window.ApiKeyAuthorization = function() {
- warn('window.ApiKeyAuthorization is deprecated. Please use SwaggerClient.ApiKeyAuthorization.');
- SwaggerClient.ApiKeyAuthorization.apply(window, arguments);
- };
+ escapeResourceName: function(resource) {
+ return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&");
+ },
- window.PasswordAuthorization = function() {
- warn('window.PasswordAuthorization is deprecated. Please use SwaggerClient.PasswordAuthorization.');
- SwaggerClient.PasswordAuthorization.apply(window, arguments);
- };
+ expandOperation: function(elem) {
+ elem.slideDown();
+ },
- function warn(message) {
- if ('console' in window && typeof window.console.warn === 'function') {
- console.warn(message);
+ 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(/