<!doctype html>
<html class="no-js" ng-app="myApp">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="swagger-ui.min.css">
</head>
<body>
<div ng-controller="MyCtrl" class="container" style="margin-bottom:100px">
<h1>angular-swagger-ui example</h1>
<form name="urlForm" ng-submit="urlForm.$valid&&(swaggerUrl=url)" class="form-inline">
<input type="url" placeholder="swagger URL" class="form-control" id="url" name="url" ng-model="url" required style="width:400px">
<button type="submit" class="btn btn-primary">explore</button>
</form>
<h3 ng-show="isLoading">loading ...</h3>
<div swagger-ui url="swaggerUrl" loading="isLoading" api-explorer="true" error-handler="myErrorHandler"></div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.17/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.17/angular-sanitize.min.js"></script>
<script src="swagger-ui.min.js"></script>
<script type="text/javascript">
angular
.module('myApp', ['ngSanitize', 'swaggerUi'])
.controller('MyCtrl', function($scope){
// init form
$scope.isLoading = false;
$scope.url = $scope.swaggerUrl = 'http://petstore.swagger.io/v2/swagger.json';
// error management
$scope.myErrorHandler = function(data, status){
alert('failed to load swagger: '+status+' '+data);
};
});
</script>
</body>
</html>
Angular swagger ui with JSON forms
/*
* Orange angular-swagger-ui - v0.2.1
*
* (C) 2015 Orange, all right reserved
* MIT Licensed
*/
"use strict";function createNewItemFromSchema(a){for(var b={},c=0;c<a.parameters.length;c++){var d=a.parameters[c];switch(d.subtype){case"object":b[d.id]=createNewItemFromSchema(d);break;case"array":b[d.id]=[];break;case"enum":b[d.id]=d["enum"][0];break;default:b[d.id]=null}}return b}function createNewArrayItemFromSchema(a){if(a.parameters)return createNewItemFromSchema(a);switch(a.items.type){default:return null}}angular.module("swaggerUi",["ng","swaggerUiTemplates"]).directive("swaggerUi",function(){return{restrict:"A",controller:"swaggerUiController",templateUrl:"templates/swagger-ui.html",scope:{url:"=",loading:"=?",apiExplorer:"=?",errorHandler:"=?",trustedSources:"=?"}}}).controller("swaggerUiController",["$scope","$http","$location","$q","swaggerClient","swaggerModules","swaggerJsonParser",function(a,b,c,d,e,f,g){function h(c,d){a.loading=!0;var e={method:"GET",url:c};f.execute(f.BEFORE_LOAD,e).then(function(){b(e).success(d).error(function(a,b){k({code:b,message:a})})})["catch"](k)}function i(b){if(a.loading=!1,"2.0"===l.swagger){var c={};f.execute(f.PARSE,b,l,a.trustedSources,c).then(function(){j(c)})["catch"](k)}else k({code:"415",message:"unsupported swagger version"})}function j(b){f.execute(f.BEFORE_DISPLAY,b).then(function(){a.infos=b.infos,a.form=b.form,a.resources=b.resources})["catch"](k)}function k(b){a.loading=!1,"function"==typeof a.errorHandler&&a.errorHandler(b.message,b.code)}var l;f.add(f.PARSE,g),a.$watch("url",function(b){a.infos={},a.resources=[],a.form={},b&&""!==b&&h(b,function(a,c,d){l=a,f.execute(f.BEFORE_PARSE,b,l).then(function(){var a=d()["content-type"]||"application/json";i(a)})["catch"](k)})}),a.expand=function(a,b){a.open=!0;for(var c=0,d=a.operations,e=d.length;e>c;c++)d[c].open=b},a.permalink=function(a){c.search("open",a)},a.submitExplorer=function(b){b.loading=!0,e.send(l,b,a.form[b.id]).then(function(a){b.loading=!1,b.explorerResult=a})}}]).directive("fileInput",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){b.bind("change",function(){a.$apply(function(){d.$setViewValue(b[0].files[0])})})}}}),angular.module("swaggerUi").service("swaggerClient",["$q","$http","swaggerModules",function(a,b,c){function d(a,b){var c="",d=b.data,e=b.config;if(e.params){var f=[];for(var g in e.params)f.push(g+"="+encodeURIComponent(e.params[g]));f.length>0&&(c="?"+f.join("&"))}a.resolve({url:e.url+c,response:{body:d?angular.isString(d)?d:angular.toJson(d,!0):"no content",status:b.status,headers:angular.toJson(b.headers(),!0)}})}var e;this.send=function(f,g,h){for(var i=a.defer(),j={},k={},l=g.path,m=null,n=0,o=g.parameters||[],p=o.length;p>n;n++){var q=o[n],r=h[q.name];switch(q["in"]){case"query":r&&(j[q.name]=r);break;case"path":l=l.replace("{"+q.name+"}",encodeURIComponent(r));break;case"header":r&&(k[q.name]=r);break;case"formData":h.body=h.body||new FormData,r&&("file"===q.type&&(h.contentType=void 0),h.body.append(q.name,r));break;case"body":"application/json"===h.contentType&&(m=JSON.stringify(h.body)),m=m||r}}k.Accept=h.responseType,k["Content-Type"]=h.body?h.contentType:"text/plain",e||(e=[f.schemes[0],"://",f.host,f.basePath||""].join(""));var s={method:g.httpMethod,url:e+l,headers:k,data:m,params:j},t=function(a,b,e,f){var g={data:a,status:b,headers:e,config:f};c.execute(c.AFTER_EXPLORER_LOAD,g).then(function(){d(i,g)})};return c.execute(c.BEFORE_EXPLORER_LOAD,s).then(function(){b(s).success(t).error(t)}),i.promise}}]),angular.module("swaggerUi").service("swaggerModel",function(){function a(a){var b=a.$ref.replace("#/definitions/","").split("#/");return b[b.length-1]}function b(a){return a.$ref.replace("#/definitions/","")}function c(a,e,f){var g;if(f=f||{},e["default"]||e.example)g=e["default"]||e.example;else if(e.properties){g={};for(var i in e.properties)g[i]=c(a,e.properties[i],f)}else if(e.$ref){var k=a.definitions&&a.definitions[b(e)];k?(h[e.$ref]||f[e.$ref]||(f[e.$ref]=!0,h[e.$ref]=c(a,k,f)),g=h[e.$ref]||{}):console.warn("schema not found",e.$ref)}else"array"===e.type?g=[c(a,e.items,f)]:"object"===e.type?g={}:(g=d(j(e)),g=e.defaultValue||e.example||d(j(e)));return g}function d(a){var b;switch(a){case"long":case"integer":b=0;break;case"boolean":b=!1;break;case"double":case"number":b=0;break;case"string":b="string";break;case"date":b=(new Date).toISOString().split("T")[0];break;case"date-time":b=(new Date).toISOString()}return b}function e(a){return"array"===a.type?a.items.$ref:a.$ref}function f(a,c){var d=a.definitions&&a.definitions[b({$ref:c})],e={};return e.required=d.required,e.type=d.type,e.subtype=d.type,d.properties&&(e.parameters=g(a,d.properties,d.required)),e}function g(a,b,c){var d=[];for(var h in b)if(b.hasOwnProperty(h)){var i=b[h];i.id=h,i.name=h,c&&(i.required=c.length?-1!==c.indexOf(h):c),i.subtype=i["enum"]?"enum":i.type;var j=e(i);if(j){var k=f(a,j);"array"===i.subtype&&(i.items=k),i.parameters=k.parameters,i.subtype=i.subtype||k.subtype}else i.properties&&(i.parameters=g(a,i.properties,i.required));d.push(i)}return d}var h={},i={},j=this.getType=function(a){var b=a.format;switch(b){case"int32":b=a.type;break;case"int64":b="long"}return b||a.type};this.generateSampleJson=function(a,b){var d,e=c(a,b);return e&&(d=angular.toJson(e,!0)),d};var k=0,l=this.generateModel=function(c,d,e,f){function g(a,b){return a.required&&-1!==a.required.indexOf(b)}var h="";if(f=f||{},d.properties){e=e||"Inline Model"+k++,f[e]=!0;var m=["<div><strong>"+e+" {</strong>"],n=[];for(var o in d.properties){var p=d.properties[o];if(m.push('<div class="pad"><strong>',o,'</strong> (<span class="type">'),p.properties){var q="Inline Model"+k++;m.push(q),n.push(l(c,p,q,f))}else if(p.$ref)m.push(a(p)),n.push(l(c,p,null,f));else if("array"===p.type){if(m.push("Array["),p.items.properties){var q="Inline Model"+k++;m.push(q),n.push(l(c,p,q,f))}else p.items.$ref?(m.push(a(p.items)),n.push(l(c,p.items,null,f))):m.push(j(p.items));m.push("]")}else m.push(j(p));m.push("</span>"),g(d,o)||m.push(", ","<em>optional</em>"),m.push(")"),p.description&&m.push(": ",p.description),p["enum"]&&m.push(" = ",angular.toJson(p["enum"]).replace(/,/g," or ")),m.push(",</div>")}m.pop(),m.push("</div>"),m.push("<strong>}</strong>"),m.push(n.join(""),"</div>"),h=m.join("")}else if(d.$ref){var r=a(d),s=c.definitions&&c.definitions[b(d)];if(f[r])return"";s&&(i[d.$ref]||(i[d.$ref]=l(c,s,r,f)),h=i[d.$ref])}else if("array"===d.type){var m=["<strong>Array ["],t="";if(d.items.properties){var q="Inline Model"+k++;m.push(q),t=l(c,d.items,q,f)}else d.items.$ref?(m.push(a(d.items)),t=l(c,d.items,null,f)):m.push(j(d.items));m.push("]</strong><br><br>",t),h=m.join("")}else"object"===d.type&&(h="<strong>Inline Model {<br>}</strong>");return h};this.clearCache=function(){h={},i={}},this.getBodySchemaAsParameters=function(a,c){var d=e(c);if(d){var f=a.definitions&&a.definitions[b({$ref:d})];if(f)return g(a,f.properties,f.required);console.warn("schema not found",c.$ref)}else console.warn("no schema ref found",c.$ref)}}),angular.module("swaggerUi").service("swaggerModules",["$q",function(a){function b(a,c,d){var e=c.shift();e?e.execute.apply(e,d).then(function(){b(a,c,d)})["catch"](a.reject):a.resolve()}var c={};this.BEFORE_LOAD="BEFORE_LOAD",this.BEFORE_PARSE="BEFORE_PARSE",this.PARSE="PARSE",this.BEFORE_DISPLAY="BEFORE_DISPLAY",this.BEFORE_EXPLORER_LOAD="BEFORE_EXPLORER_LOAD",this.AFTER_EXPLORER_LOAD="AFTER_EXPLORER_LOAD",this.add=function(a,b){c[a]||(c[a]=[]),c[a].push(b)},this.execute=function(){var d=Array.prototype.slice.call(arguments),e=d.splice(0,1),f=a.defer(),g=c[e]||[];return b(f,[].concat(g),d),f.promise}}]),angular.module("swaggerUi").service("swaggerJsonParser",["$q","$sce","$location","swaggerModel",function(a,b,c,d){function e(a){var c=a;return"string"==typeof a&&i&&(c=b.trustAsHtml(a)),c}function f(a){for(var b={},c=0;c<a.length;c++){var d=a[c];switch(d.subtype){case"object":b[d.id]=f(d.parameters);break;case"array":b[d.id]=[];break;case"enum":b[d.id]=d["enum"][0];break;default:b[d.id]=null}}return b}function g(a,g){var i=0,j=0,k={},l={},m=[],n=h.info,o=c.search().open;if(h.schemes=[h.schemes&&h.schemes[0]?h.schemes[0]:c.protocol()],h.host=h.host||c.host(),n.scheme=h.schemes[0],n.basePath=h.basePath,n.host=h.host,n.description=e(n.description),h.tags)for(var p=0,q=h.tags.length;q>p;p++){var r=h.tags[p];m.push(r),k[r.name]=p}else m.push({name:"default",open:!0}),k["default"]=0;for(var s in h.paths)for(var t in h.paths[s]){var u=h.paths[s][t];u.id=i,u.description=e(u.description),u.consumes=u.consumes||h.consumes,u.produces=u.produces||h.produces,l[i]={contentType:u.consumes&&1===u.consumes.length?u.consumes[0]:"application/json",responseType:"application/json"},u.httpMethod=t,u.path=s;for(var v=0,w=u.parameters||[],x=w.length;x>v;v++){var y=w[v];if(y.$ref){var z=y.$ref.replace("#/","").split("/");y=h[z[0]][z[1]],w[v]=y}y.id=j,y.type=d.getType(y),y.description=e(y.description),y.items&&y.items["enum"]&&(y["enum"]=y.items["enum"],y["default"]=y.items["default"]),y.subtype=y["enum"]?"enum":y.type,l[i][y.name]=y["default"]||"",y.schema&&(y.schema.display=1,y.schema.json=d.generateSampleJson(h,y.schema),y.schema.model=b.trustAsHtml(d.generateModel(h,y.schema))),"body"===y["in"]&&(u.consumes=u.consumes||["application/json"],"application/json"===u.consumes[0]&&(y.parameters=d.getBodySchemaAsParameters(h,y.schema),l[i][y.name]=f(y.parameters))),j++}if(u.responses)for(var A in u.responses){var B=u.responses[A];B.description=e(B.description),B.schema?(B.schema.json=d.generateSampleJson(h,B.schema),"object"===B.schema.type||"array"===B.schema.type||B.schema.$ref?(B.display=1,B.schema.model=b.trustAsHtml(d.generateModel(h,B.schema))):"string"===B.schema.type&&delete B.schema,"200"===A||"201"===A?(u.responseClass=B,u.responseClass.display=1,u.responseClass.status=A,delete u.responses[A]):u.hasResponses=!0):u.hasResponses=!0}u.tags=u.tags||["default"];var r=u.tags[0];"undefined"==typeof k[r]&&(k[r]=m.length,m.push({name:r}));var C=m[k[u.tags[0]]];u.open=o&&o===u.operationId||o===C.name+"*",C.operations=C.operations||[],C.operations.push(u),u.open&&(C.open=!0),i++}for(var p=0;p<m.length;p++){var C=m[p],D=m[p].operations;C.open=C.open||o===C.name||o===C.name+"*",(!D||D&&0===D.length)&&m.splice(p,1)}m.sort(function(a,b){return a.name>b.name?1:a.name<b.name?-1:0}),d.clearCache(),g.infos=n,g.resources=m,g.form=l,a.resolve()}var h,i;this.execute=function(b,c,d,e){var f=a.defer();if("application/json"===b){h=c,i=d;try{g(f,e)}catch(j){f.reject({code:"500",message:"failed to parse swagger: "+j.message})}}else f.resolve();return f.promise}}]),angular.module("swaggerUi").directive("swaggerJsonForm",function(){return{restrict:"E",scope:{parameters:"=",form:"="},templateUrl:"templates/json-form.html",link:function(a){a.addArrayItem=function(a,b){b[b.length]=createNewArrayItemFromSchema(a)},a.removeArrayItem=function(a,b){b.splice(a,1)}}}}),angular.module("swaggerUiTemplates",["templates/json-form-partials/array-items/complex-item.html","templates/json-form-partials/array-items/simple-item.html","templates/json-form-partials/array.html","templates/json-form-partials/enum.html","templates/json-form-partials/main.html","templates/json-form-partials/object.html","templates/json-form-partials/simple-type.html","templates/json-form.html","templates/swagger-ui.html"]),angular.module("templates/json-form-partials/array-items/complex-item.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/array-items/complex-item.html",'<span class="json-form" ng-style="{\'margin-left\': 20+$index+\'px\'}" ng-repeat="param in param.parameters"> <label>{{param.name}}: </label> <span ng-switch="param.subtype"> <span ng-switch-when="object"> <span ng-init="arrayform=arrayform[param.id]"></span> <span>{</span> <div class="json-form-block" ng-include src="\'templates/json-form-partials/array-items/complex-item.html\'"></div> <div ng-style="{\'margin-left\': $index+\'px\'}">}</div> </span> <span ng-switch-when="array"> <span ng-init="subform=arrayform[param.id]"></span> <span class="json-form-block" ng-include src="\'templates/json-form-partials/array.html\'"></span> </span> <span ng-switch-when="enum"> <select ng-model="arrayform[param.id]"> <option ng-repeat="value in param.enum" value="{{value}}" ng-bind="value + (param.default === value ? \' (default)\' : \'\')" ng-selected="param.default===value"> </select> </span> <span ng-switch-default> <input ng-model="arrayform[param.id]" placeholder="{{param.subtype}} {{param.required ? \'(required)\' : \'\'}}" ng-required="param.required"> </span> </span> </span>')}]),angular.module("templates/json-form-partials/array-items/simple-item.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/array-items/simple-item.html",'<input ng-model="subform[id]" ng-model-options="{allowInvalid: true}" placeholder="{{param.items.type}} {{param.required ? \'(required)\' : \'\'}}" ng-required="param.required">')}]),angular.module("templates/json-form-partials/array.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/array.html",'<span>[</span> <div class="json-form-array-add-item" ng-click="addArrayItem(param, subform)"></div> <div class="json-form-block" ng-repeat="(id, val) in subform track by id"> <div ng-if="subform[id] !== undefined"> <div class="json-form-array-remove-item" ng-click="removeArrayItem(id, subform)"></div> <div ng-style="{\'margin-left\': 20+$index+\'px\', \'display\': \'inline-block\'}"> <span ng-if="param.parameters"> <span ng-init="arrayform = subform[id]"></span> <div>{</div> <div class="json-form-block" ng-include src="\'templates/json-form-partials/array-items/complex-item.html\'"></div> <div>}</div> </span> <span ng-if="!param.parameters"> <span ng-include src="\'templates/json-form-partials/array-items/simple-item.html\'"></span> </span> </div> </div> </div> <span ng-style="{\'margin-left\': $index+\'px\'}">]</span>')}]),angular.module("templates/json-form-partials/enum.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/enum.html",'<select ng-model="subform[param.id]"> <option ng-repeat="value in param.enum" value="{{value}}" ng-bind="value + (param.default === value ? \' (default)\' : \'\')" ng-selected="param.default===value"> </select>')}]),angular.module("templates/json-form-partials/main.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/main.html",'<div class="json-form" ng-style="{\'margin-left\': 20+$index+\'px\'}" ng-init="subform = subform"> <label>{{param.name}}: </label> <span ng-switch="param.subtype"> <span ng-switch-when="object"> <span ng-init="subform=subform[param.id]" ng-include src="\'templates/json-form-partials/object.html\'"></span> </span> <span ng-init="subform=subform[param.id]" ng-switch-when="array"> <span ng-include src="\'templates/json-form-partials/array.html\'"></span> </span> <span ng-switch-when="enum"><span ng-include src="\'templates/json-form-partials/enum.html\'"></span></span> <span ng-switch-default><div ng-include src="\'templates/json-form-partials/simple-type.html\'"></div></span> </span> </div>')}]),angular.module("templates/json-form-partials/object.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/object.html","<span>{</span> <div class=\"json-form-block\" ng-style=\"{'margin-left': $index+'px'}\"> <div ng-repeat=\"param in param.parameters\" ng-include src=\"'templates/json-form-partials/main.html'\"></div> </div> <span ng-style=\"{'margin-left': $index+'px'}\">}</span>")}]),angular.module("templates/json-form-partials/simple-type.html",[]).run(["$templateCache",function(a){a.put("templates/json-form-partials/simple-type.html",'<input ng-model="subform[param.id]" ng-model-options="{allowInvalid: true}" placeholder="{{param.items ? param.items.type : param.subtype}} {{param.required ? \'(required)\' : \'\'}}" ng-required="param.required">')}]),angular.module("templates/json-form.html",[]).run(["$templateCache",function(a){a.put("templates/json-form.html",'{ <div class="json-form-block"> <div ng-init="subform=form" ng-repeat="param in parameters" ng-include src="\'templates/json-form-partials/main.html\'"></div> </div> }')}]),angular.module("templates/swagger-ui.html",[]).run(["$templateCache",function(a){a.put("templates/swagger-ui.html",'<div class="swagger-ui" aria-live="polite" aria-relevant="additions removals"> <div class="api-name"> <h3 ng-bind="infos.title"></h3> </div> <div class="api-description" ng-bind-html="infos.description"></div> <div class="api-infos"> <div class="api-infos-contact" ng-if="infos.contact"> <div ng-if="infos.contact.name" class="api-infos-contact-name">created by <span ng-bind="infos.contact.name"></span></div> <div ng-if="infos.contact.url" class="api-infos-contact-url">see more at <a href="{{infos.contact.url}}" ng-bind="infos.contact.url"></a></div> <a ng-if="infos.contact.email" class="api-infos-contact-url" href="mailto:{{infos.contact.email}}?subject={{infos.title}}">contact the developer</a> </div> <div class="api-infos-license" ng-if="infos.license"> <span>license: </span><a href="{{infos.license.url}}" ng-bind="infos.license.name"></a> </div> </div> <ul class="list-unstyled endpoints"> <li ng-repeat="api in resources" class="endpoint" ng-class="{active:api.open}"> <div class="clearfix"> <ul class="list-inline pull-left endpoint-heading"> <li> <h4> <a href="javascript:;" ng-click="api.open=!api.open;permalink(api.open?api.name:null)" ng-bind="api.name"></a> <span ng-if="api.description"> : <span ng-bind="api.description"></span></span> </h4> </li> </ul> <ul class="list-inline pull-right endpoint-actions"> <li> <a href="javascript:;" ng-click="api.open=!api.open;permalink(api.open?api.name:null)">open/hide</a> </li> <li> <a href="javascript:;" ng-click="expand(api);permalink(api.name)">list operations</a> </li> <li> <a href="javascript:;" ng-click="expand(api,true);permalink(api.name+\'*\')">expand operations</a> </li> </ul> </div> <ul class="list-unstyled collapse operations" ng-class="{in:api.open}"> <li ng-repeat="op in api.operations" class="operation {{op.httpMethod}}"> <div class="heading"> <a ng-click="op.open=!op.open;permalink(op.open?op.operationId:null)" href="javascript:;"> <div class="clearfix"> <span class="http-method text-uppercase" ng-bind="op.httpMethod"></span> <span class="path" ng-bind="op.path"></span> <span class="description pull-right" ng-bind="op.summary"></span> </div> </a> </div> <div class="content collapse" ng-class="{in:op.open}"> <div ng-if="op.description"> <h5>implementation notes</h5> <p ng-bind-html="op.description"></p> </div> <form role="form" name="explorerForm" ng-submit="explorerForm.$valid&&submitExplorer(op)"> <div ng-if="op.responseClass" class="response"> <h5>response class (status {{op.responseClass.status}})</h5> <div ng-if="op.responseClass.display!==-1"> <ul class="list-inline schema"> <li><a href="javascript:;" ng-click="op.responseClass.display=0" ng-class="{active:op.responseClass.display===0}">model</a></li> <li><a href="javascript:;" ng-click="op.responseClass.display=1" ng-class="{active:op.responseClass.display===1}">model schema</a></li> </ul> <pre class="model" ng-if="op.responseClass.display===0" ng-bind-html="op.responseClass.schema.model"></pre> <pre class="model-schema" ng-if="op.responseClass.display===1" ng-bind="op.responseClass.schema.json"></pre> </div> <div ng-if="op.produces" class="content-type"> <label for="responseContentType{{op.id}}">response content type</label> <select ng-model="form[op.id].responseType" ng-options="item for item in op.produces track by item" id="responseContentType{{op.id}}" name="responseContentType{{op.id}}" required></select> </div> </div> <div ng-if="op.parameters&&op.parameters.length>0" class="table-responsive"> <h5>parameters</h5> <table class="table table-condensed parameters"> <thead> <tr> <th class="name">parameter <th class="value">value <th class="desc">description <th class="type">parameter type <th class="data">data type <tbody> <tr ng-repeat="param in op.parameters"> <td ng-class="{bold:param.required}"> <label for="param{{param.id}}" ng-bind="param.name"></label> <td ng-class="{bold:param.required}"> <div ng-if="apiExplorer"> <div ng-if="param.in!==\'body\'" ng-switch="param.subtype"> <input ng-switch-when="file" type="file" file-input ng-model="form[op.id][param.name]" id="param{{param.id}}" placeholder="{{param.required?\'(required)\':\'\'}}" ng-required="param.required"> <select ng-switch-when="enum" ng-model="form[op.id][param.name]" id="param{{param.id}}"> <option ng-repeat="value in param.enum" value="{{value}}" ng-bind="value+(param.default===value?\' (default)\':\'\')" ng-selected="param.default===value"> </select> <input ng-switch-default type="text" ng-model="form[op.id][param.name]" id="param{{param.id}}" placeholder="{{param.required?\'(required)\':\'\'}}" ng-required="param.required"> </div> <div ng-if="param.in===\'body\'"> <textarea ng-if="!param.parameters" id="param{{param.id}}" ng-model="form[op.id][param.name]" ng-required="param.required"></textarea> <div ng-if="param.parameters"> <swagger-json-form parameters="param.parameters" form="form[op.id][\'body\']"></swagger-json-form> </div> <br> <div ng-if="op.consumes" class="content-type"> <label for="bodyContentType{{op.id}}">parameter content type</label> <select ng-model="form[op.id].contentType" id="bodyContentType{{op.id}}" name="bodyContentType{{op.id}}" ng-options="item for item in op.consumes track by item"></select> </div> </div> </div> <div ng-if="!apiExplorer"> <div ng-if="param.in!==\'body\'"> <div ng-if="param.default"><span ng-bind="param.default"></span> (default)</div> <div ng-if="param.enum"> <span ng-repeat="value in param.enum">{{value}}<span ng-if="!$last"> or </span></span> </div> <div ng-if="param.required"><strong>(required)</strong></div> </div> </div> <td ng-class="{bold:param.required}" ng-bind-html="param.description"> <td ng-bind="param.in"> <td ng-if="param.type" ng-switch="param.type"> <span ng-switch-when="array" ng-bind="\'Array[\'+param.items.type+\']\'"></span> <span ng-switch-default ng-bind="param.type"></span> <td ng-if="param.schema"> <ul class="list-inline schema"> <li><a href="javascript:;" ng-click="param.schema.display=0" ng-class="{active:param.schema.display===0}">model</a></li> <li><a href="javascript:;" ng-click="param.schema.display=1" ng-class="{active:param.schema.display===1}">model schema</a></li> </ul> <pre class="model" ng-if="param.schema.display===0&¶m.schema.model" ng-bind-html="param.schema.model"></pre> <div class="model-schema" ng-if="param.schema.display===1&¶m.schema.json"> <pre ng-bind="param.schema.json" ng-click="form[op.id][param.name]=param.schema.json" aria-described-by="help-{{param.id}}"></pre> <div id="help-{{param.id}}">click to set as parameter value</div> </div> </table> </div> <div class="table-responsive" ng-if="op.hasResponses"> <h5>response messages</h5> <table class="table responses"> <thead> <tr> <th class="code">HTTP status code <th>reason <th>response model <tbody> <tr ng-repeat="(code, resp) in op.responses"> <td ng-bind="code"> <td ng-bind-html="resp.description"> <td> <ul ng-if="resp.schema&&resp.schema.model&&resp.schema.json" class="list-inline schema"> <li><a href="javascript:;" ng-click="resp.display=0" ng-class="{active:resp.display===0}">model</a></li> <li><a href="javascript:;" ng-click="resp.display=1" ng-class="{active:resp.display===1}">model schema</a></li> </ul> <pre class="model" ng-if="resp.display===0&&resp.schema&&resp.schema.model" ng-bind-html="resp.schema.model"></pre> <pre class="model-schema" ng-if="resp.display===1&&resp.schema&&resp.schema.json" ng-bind="resp.schema.json"></pre> </table> </div> <div ng-if="apiExplorer"> <button class="btn btn-default" ng-click="op.explorerResult=false;op.hideExplorerResult=false" type="submit" ng-disabled="op.loading" ng-bind="op.loading?\'loading...\':\'try it out!\'"></button> <a class="hide-try-it" ng-if="op.explorerResult&&!op.hideExplorerResult" ng-click="op.hideExplorerResult=true" href="javascript:;">hide response</a> </div> </form> <div ng-if="op.explorerResult" ng-show="!op.hideExplorerResult"> <h5>request URL</h5> <pre ng-bind="op.explorerResult.url"></pre> <h5>response body</h5> <pre ng-bind="op.explorerResult.response.body"></pre> <h5>response code</h5> <pre ng-bind="op.explorerResult.response.status"></pre> <h5>response headers</h5> <pre ng-bind="op.explorerResult.response.headers"></pre> </div> </div> </li> </ul> </li> </ul> <div class="api-version" ng-if="infos"> [BASE URL: <span class="h4" ng-bind="infos.basePath"></span>, API VERSION: <span class="h4" ng-bind="infos.version"></span>, HOST: <span class="h4" ng-bind="infos.scheme"></span>://<span class="h4" ng-bind="infos.host"></span>] </div> </div>')}]);
.swagger-ui .api-description{margin-bottom:20px}.swagger-ui .api-version{color:#999}.swagger-ui .external-docs{color:#000}.swagger-ui .endpoint{border-bottom:1px solid #ddd}.swagger-ui .endpoint:last-child{border:0}.swagger-ui .endpoint.active h4 a,.swagger-ui .endpoint:hover h4 a{color:#000}.swagger-ui .endpoint.active .endpoint-actions li a,.swagger-ui .endpoint:hover .endpoint-actions li a{color:#555}.swagger-ui .endpoint a{text-decoration:none;color:#999}.swagger-ui .endpoint a:hover{color:#000;text-decoration:underline}.swagger-ui .endpoint .endpoint-heading span{color:#999}.swagger-ui .endpoint .endpoint-actions{line-height:1.1;margin:10px 0}.swagger-ui .endpoint .endpoint-actions li{border-right:1px solid #ddd}.swagger-ui .endpoint .endpoint-actions li:last-child{border-right:0}.swagger-ui .operation{margin-bottom:10px}.swagger-ui .operation .heading a:hover{text-decoration:none}.swagger-ui .operation .http-method{color:#fff;padding:7px 0 4px;text-align:center;width:50px;border-radius:2px;display:inline-block;font-size:.7em}.swagger-ui .operation .path{color:#000;padding-left:10px;display:inline-block}.swagger-ui .operation .description{margin:2px 10px 0 0}.swagger-ui .operation .content-type label{margin-right:5px}.swagger-ui .operation .content{padding:10px;border-top:0 !important}.swagger-ui .operation .content h5{font-weight:bold;padding:15px 0 5px;margin:0}.swagger-ui .operation .content .table{margin:0;font:inherit;table-layout:fixed;min-width:650px}.swagger-ui .operation .content .table-responsive .table td,.swagger-ui .operation .content .table-responsive .table th{white-space:initial;word-break:break-word}.swagger-ui .operation .content thead th{color:#666;padding:5px;border-bottom:1px solid #999}.swagger-ui .operation .content pre{background-color:#fcf6db;border:1px solid #e5e0c6;max-height:200px;overflow:auto;font-size:.9em;word-wrap:initial}.swagger-ui .operation .content input,.swagger-ui .operation .content textarea{width:100%}.swagger-ui .operation .content textarea{height:100px;resize:none;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:.9em}.swagger-ui .operation .content label{font-weight:normal}.swagger-ui .operation .content ul.schema{margin:0}.swagger-ui .operation .content ul.schema li{border-right:1px solid #ddd;margin:0 5px 5px 0;padding:2px 5px 2px 0}.swagger-ui .operation .content ul.schema li:last-child{border-right:0}.swagger-ui .operation .content ul.schema li a{color:#aaa}.swagger-ui .operation .content ul.schema li a.active,.swagger-ui .operation .content ul.schema li a:hover{color:#000}.swagger-ui .operation .content pre.model{font:inherit;border:0;background:transparent !important;height:auto;max-height:initial;cursor:text;font-size:.9em;word-break:break-word;white-space:normal}.swagger-ui .operation .content pre.model .model-item{margin-bottom:5px}.swagger-ui .operation .content pre.model .type{color:#55a}.swagger-ui .operation .content pre.model .pad{margin-left:1em}.swagger-ui .operation .content .parameters .model-schema pre{cursor:pointer}.swagger-ui .operation .content .parameters .model-schema pre:hover{background-color:#ffd}.swagger-ui .operation .content .parameters .name{width:12%}.swagger-ui .operation .content .parameters .value{width:30%}.swagger-ui .operation .content .parameters .desc{width:20%}.swagger-ui .operation .content .parameters .type{width:12%}.swagger-ui .operation .content .responses .code{width:15%}.swagger-ui .operation .content .hide-try-it{text-decoration:underline;padding:4px 0 0 10px}.swagger-ui .get .heading,.swagger-ui .get .content{background-color:#e7f0f7;border:1px solid #c3d9ec}.swagger-ui .get .http-method{background-color:#0f6ab4}.swagger-ui .get h5,.swagger-ui .get .description{color:#0f6ab4}.swagger-ui .get a.hide-try-it{color:#6fa5d2}.swagger-ui .post .heading,.swagger-ui .post .content{background-color:#ebf7f0;border:1px solid #c3e8d1}.swagger-ui .post .http-method{background-color:#10a54a}.swagger-ui .post h5,.swagger-ui .post .description{color:#10a54a}.swagger-ui .post a.hide-try-it{color:#6fc992}.swagger-ui .put .heading,.swagger-ui .put .content{background-color:#f9f2e9;border:1px solid #f0e0ca}.swagger-ui .put .http-method{background-color:#c5862b}.swagger-ui .put h5,.swagger-ui .put .description{color:#c5862b}.swagger-ui .put a.hide-try-it{color:#dcb67f}.swagger-ui .delete .heading,.swagger-ui .delete .content{background-color:#f5e8e8;border:1px solid #e8c6c7}.swagger-ui .delete .http-method{background-color:#a41e22}.swagger-ui .delete h5,.swagger-ui .delete .description{color:#a41e22}.swagger-ui .delete a.hide-try-it{color:#c8787a}.swagger-ui .patch .heading,.swagger-ui .patch .content{background-color:#fce9e3;border:1px solid #f5d5c3}.swagger-ui .patch .http-method{background-color:#d38042}.swagger-ui .patch h5,.swagger-ui .patch .description{color:#d38042}.swagger-ui .patch a.hide-try-it{color:#dcb67f}.swagger-ui .head .heading,.swagger-ui .head .content{background-color:#fcffcd;border:1px solid #ffd20f}.swagger-ui .head .http-method{background-color:#ffd20f}.swagger-ui .head h5,.swagger-ui .head .description{color:#ffd20f}.swagger-ui .head a.hide-try-it{color:#6fc992}.swagger-ui .bold,.swagger-ui .bold label{font-weight:bold !important}.swagger-ui .json-form{display:inline-block}.swagger-ui .json-form input{width:auto !important;display:inline-block}.swagger-ui .json-form a{border:none;color:transparent}.swagger-ui .json-form-label{display:inline-block}.swagger-ui .json-form-block{border-left:1px dotted #aaa}.swagger-ui .json-form-array-add-item{width:14px;height:14px;display:inline-block;background-size:14px 14px;margin:3px 0 -3px 3px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0Y3NDYzRDEzRTc4MTFFNUJBRkJGNUM4QzQ2QzFEM0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0Y3NDYzRDIzRTc4MTFFNUJBRkJGNUM4QzQ2QzFEM0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Rjc0NjNDRjNFNzgxMUU1QkFGQkY1QzhDNDZDMUQzQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3Rjc0NjNEMDNFNzgxMUU1QkFGQkY1QzhDNDZDMUQzQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj4GdrAAAAjTSURBVHjanFdpbFxXFf7eMotn9Yw9dux4i+0kdjYnoU0apCRVE0RatQ2UQIoQfypRKtE/iAAVEj+QKgQSCCGkSPmBWCqQEBJEKWlokGgLalOS4CSKnHHsOt7Gs3gZj2fGs7ztcu59b8ZxHJrCG5152733fOc7230SPsGh0K996+bm2FDsmaaByLPBTf4nNK3S6XU1QJYVlLVVKKqa1QvWzcW72bfmb85fyIymx0vV0iPXlj7upUy/LUO9fYHd/ld2PLH1hd19A707Nm9HR2MbGn0hqLJKK0gwLRPFShGplXmMZSZwa/LOwsjw+NvZG8tnE9dmr5S00v8OoKm5Sd35wq7v9hxs+/aJ/UfDB7r3we/2oGzkUdIL0I0yLGbYi0gKgfGiweWHzx2GaUoYSY3h0u132Mi1id9MvHnve1PxydQnBrB5a0fXjq8M/Or44YNPndzzGbhUC4urSZRJMYNJs5iYKNGP1SbRhcXouSTDLfsQ9bXBq4bwj4mr+NM//zY5dn7ypfh7d97d6N4Hjp2Hdg32f7nn0kvPfu6xYwOPY754D5niFKrmKixSzuifVJEiywZD14xZpNwRckfVLGO5nEG+uoTtrX3Y0zMYmfYlT/tdjaPp0VScrcFeD6C9f3MnKX/7ledO9ffFYpjOjqBiFIV5tnLDUWrQ81XoZpVcUYVGZ84KB2IyQ4zm15pZwVIpjaC3AQf69rnuqYmT5axxdXkmO7EBQLQp6h762p7zL3722L6epjASuY/IItvimnJ+VmSGK6MTmE0DSzkLmayO1JKGeGIG7c1+AZYHJRdG8zkrhUoWLoVhR8d2dc6/fKI8rf0xt5DLcb2qQEFBtPvU0JkDj2890hsLY2Z5nJ7JoFiCLDEn0Gzh9FU1Cd86/gNEAkHU2PzRpe+Tohz8ngC5wX5oMTFBDJkvJhH1t+DY3qFY+Uv62exPss/kCyuUZ9z6rqbu5j3+1x7r6UYyN0noNWhWFYZp06vTte5ca0aFgDABTBYASWRuhGS7xBnPx4r5zlzT0pHJz6K7KYAtg81Px/a1fF4wwHO540jnN/Zu6whWjSz5tkyLSmuR7lheY4G7hfvZtMjPZKlFZ4WKEX9uK1aJeqyJkyGM2OD3S5RNuzs3IX6k/bXMjfQFtbWnralrX8uLrSE3cuWs0CJo4QAkrIHgq9DZZMxRbgnlXGRJESloM6DUlXHlTPxJInf4g6rBKD0l9AzEDqSGOg+pbfvbn2uKuTotqyRoW2e1QzHEve1XmYLLEpazOgBLYiL9+HwXMSBCQNSFmvVrbFgWVU4zj+agiujOyCm1eTD6fNAL8HLJo1YSlktQKD8Y+Q0S6kwIQDKnWhYK1wBYMGisbpZIbMU1y/mZV0qumIYSe/y9RiyYCHX5jqhKlB1UFYMaSlko52nGFd6dpXsWoPv1ZVMsbobouVQHwAiAWwphfEqiclxPDOcsoaLn0dOmQlVcFJhMAOHIXAGrT10qpNsluZUGUXTzaJa5nytwoxtnjv2YLOZFxV7KOVFplskCDxUhXdybVhkvH34VFU2vB2vtaHD58Mv3zyJZuIhoIExzmGDBBlYIqQoVCMPQUOHBR8pVop5XMJUsbPQF7JLL2IZ+wQvN/YdHccPr82wY53P74XW7USlXUNW9awC4PlpblYlyrtDkzZcHmqRjVc/Ba2oULLzxmA8FAKx/Zj50DBVtk1KWJFdaImXcbje5QHaC3ITKlfDo5Z2VoNALHmQGvEyGKrlpkAG2TpmIBJqjrQPhIgYkUdnXA+Fr8OcGmc0D3bLI1cxFQa6Idi6d+NnhbHN0IcIIFY987gYOYiXXhC2RveAM2aEMp7ya8Lua8PKnX4XX5RG1niv//fU3MLZwE27VXcfARJlXMUW9R264R+84EAjhrs7l/WXVo4VvmSzzJBiPPlsXRxcMZ5HS33IA2fXApk3H9EIXBdzX4VHdThZIuDt/A2nzInySj9xhr8OjnYvqJ4uJCcPxP9+wqC4dkuZLqEvx1YsNre4nXQrRqqNOokKaPYrPVi7fX5x0Uuy19wD1OmAKFjzwwU1zLEc570VErLiupZ9p2VQq1AapKn8op4aTf64UA8ter0ERKgl0PPYMA3W6xLUjulGzzFonPFD5WP1hc03baoOU8/kNXipcpg/Z+Op5OXl3dmJxTLkku3h+M7GAGCwENpgHxLbQekBQn7N+nmMUt94BHwwayCb9k8kbs5flMm2dp99N/XwhG2CtzVROdWeB+oLSBgC8C3KLH8bA/YoNR3FtXpXWbomaWNVcSHxQ+sVCOlMUhTYTn7taHGv5bZWctqnZpAB7uBWGIQlKLcbjwwuv0mCL2mCnmnDTRvY4iCqtGfAxBIIasonOeObD5Ln6loxXNWuRXXH1dpzu6l4OM1PGSlGyd0D3dzTYfb1UkbCYz+NWahj/TlzDcOI64vO3wNQCeDbVm44jPLgbvAzbeiqYmIuZ0+dLpydvj49v2JbvOrr3aMcX1L9+aueyN5UmmuYViu4HsgD29rtEzWst35nIDI+qinc1sLVgbgxaGOjTcGfGh5nLoTM3/3D1p7qlb9wVz0+np1t8/aP5kPf53u4VtTEgIbsiiT1grbDY2z0qqNTZXI64RRWURf4L603bag6kq91EX7eGkWk/VoY7fnj11++/rlvaf/8uSMYTcbkQua41tx0PR5cDWztN8QFSLMvCj3YQok5zTWopx9OMMxWLWtjVr1OD0jFyr8Wc+3vDd6698cHrVdrGf+yHCadzaXp+wkp6zkuR7b15qbKts61C/dxAyM9Eu+a7XZGKzq6Xu8jtYggHGbo2meRrHdGIgdklD6bGem8n/lL+6u03h3/3oPJHfpxGwlFse2rHFz2D7JubtlUOxaJ5atEmUW5/ulrOrkcSmxgmGk6homAxF0BqyjdWvus+N/3OR+fmZhOr/9fXce0IhcJS1/6+w5HB0ElfB454QpV+aleN3Gq+fdN0voMOlMySf6aUVv6VGy1cSN2au5yZSxYftfZ/BBgAcZp9d4tSJVQAAAAASUVORK5CYII=')}.swagger-ui .json-form-array-remove-item{width:14px;height:14px;background-size:14px 14px;display:inline-block;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAiCAYAAAA+stv/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0Y3NDYzRDUzRTc4MTFFNUJBRkJGNUM4QzQ2QzFEM0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0Y3NDYzRDYzRTc4MTFFNUJBRkJGNUM4QzQ2QzFEM0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Rjc0NjNEMzNFNzgxMUU1QkFGQkY1QzhDNDZDMUQzQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3Rjc0NjNENDNFNzgxMUU1QkFGQkY1QzhDNDZDMUQzQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtlKxgYAAAhbSURBVHja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')}