diff --git a/dist/css/swagger-ui.css b/dist/css/swagger-ui.css index fadcad9..cd242d7 100644 --- a/dist/css/swagger-ui.css +++ b/dist/css/swagger-ui.css @@ -1,5 +1,5 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed diff --git a/dist/css/swagger-ui.min.css b/dist/css/swagger-ui.min.css index 78ab754..b75b0d7 100644 --- a/dist/css/swagger-ui.min.css +++ b/dist/css/swagger-ui.min.css @@ -1,5 +1,5 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed diff --git a/dist/less/swagger-ui.less b/dist/less/swagger-ui.less index 9fdf1d0..a499b88 100644 --- a/dist/less/swagger-ui.less +++ b/dist/less/swagger-ui.less @@ -1,5 +1,5 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed diff --git a/dist/scripts/modules/swagger-external-references.min.js b/dist/scripts/modules/swagger-external-references.min.js index 657e7d5..e87bee1 100644 --- a/dist/scripts/modules/swagger-external-references.min.js +++ b/dist/scripts/modules/swagger-external-references.min.js @@ -1,7 +1,7 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed */ -"use strict";angular.module("swaggerUi").service("swaggerUiExternalReferences",["$http","$q","swaggerModules",function(a,b,c){function d(a){k.reject(a)}function e(b,e,f){var g={method:"GET",url:b,transformResponse:function(a){f&&(a=a.replace(/"\$ref": ?"#\/(.*)\/(.*)"/g,'"$ref": "#/$1/'+f+'/$2"'));var b;try{b=angular.fromJson(a)}catch(c){d({code:500,message:"failed to parse JSON"})}return b}};c.execute(c.BEFORE_LOAD,g).then(function(){a(g).success(e).error(function(a,b){d({message:a,code:b})})})["catch"](d)}function f(a){var b=a.split("#/"),c=b[0];if(0!==c.indexOf("http")&&0!==c.indexOf("https"))if(0===c.indexOf("/")){var d=URL.parse(j);c=d.protocol+"//"+d.host+c}else{var e=j.lastIndexOf("/");c=j.substring(0,e)+"/"+c}return c}function g(){function a(a){b++,e(f(a.$ref),function(c){b--,delete a.$ref;for(var d in c)a[d]=c[d];0===b&&i()})}var b=0;for(var c in l.paths){var d=l.paths[c];h(d)&&a(d)}0===b&&i()}function h(a){return a&&a.$ref&&0!==a.$ref.indexOf("#/")}function i(){function a(a){var b=a.$ref.match(/(.*)#\/(.*)\/(.*)/),c=b[1],h=b[2],i=f(a.$ref);a.$ref=a.$ref.replace(/(.*)#\/(.*)\/(.*)/,"#/$2/$1/$3"),g[i]||(d++,g[i]=!0,e(i,function(a){for(var b in a)l[h][c]=a[b];d--,0===d&&k.resolve(!0)},c))}function b(b){h(b)?a(b):h(b.items)&&a(b.items)}function c(a){for(var c=0,d=a.parameters||[],e=d.length;e>c;c++)d[c].schema&&b(d[c].schema);for(var f in a.responses||{})a.responses[f].schema&&b(a.responses[f].schema)}var d=0,g={};for(var i in l.paths){var j=l.paths[i];for(var m in j)c(j[m])}0===d&&k.resolve(!0)}var j,k,l;this.execute=function(a,c){return j=a,l=c,k=b.defer(),g(),k.promise}}]); \ No newline at end of file +"use strict";angular.module("swaggerUi").service("swaggerUiExternalReferences",["$http","$q","swaggerModules",function(a,b,c){function d(a){k.reject(a)}function e(b,e,f){var g={method:"GET",url:b,transformResponse:function(a){f&&(a=a.replace(/"\$ref": ?"#\/(.*)\/(.*)"/g,'"$ref": "#/$1/'+f+'/$2"'));var b;try{b=angular.fromJson(a)}catch(c){d({code:500,message:"failed to parse JSON"})}return b}};c.execute(c.BEFORE_LOAD,g).then(function(){a(g).success(e).error(function(a,b){d({message:a,code:b})})})["catch"](d)}function f(a){var b=a.split("#/"),c=b[0];if(0!==c.indexOf("http")&&0!==c.indexOf("https"))if(0===c.indexOf("/")){var d=URL.parse(j);c=d.protocol+"//"+d.host+c}else{var e=j.lastIndexOf("/");c=j.substring(0,e)+"/"+c}return c}function g(){function a(a){b++,e(f(a.$ref),function(c){b--,delete a.$ref;for(var d in c)a[d]=c[d];0===b&&i()})}var b=0;for(var c in l.paths){var d=l.paths[c];h(d)&&a(d)}0===b&&i()}function h(a){return a&&a.$ref&&0!==a.$ref.indexOf("#/")}function i(){function a(a){var b=a.$ref.match(/(.*)#\/(.*)\/(.*)/),c=b[1],h=b[2],i=f(a.$ref);a.$ref=a.$ref.replace(/(.*)#\/(.*)\/(.*)/,"#/$2/$1/$3"),g[i]||(d++,g[i]=!0,e(i,function(a){for(var b in a)l[h][c]=a[b];d--,0===d&&k.resolve(!0)},c))}function b(b){h(b)?a(b):h(b.items)&&a(b.items)}function c(a){for(var c=0,d=a.parameters||[],e=d.length;e>c;c++)d[c].schema&&b(d[c].schema);for(var f in a.responses||{})a.responses[f].schema&&b(a.responses[f].schema)}var d=0,g={};for(var i in l.paths){var j=l.paths[i];for(var m in j)c(j[m])}0===d&&k.resolve(!0)}var j,k,l;this.execute=function(a,c){return j=a,l=c,k=b.defer(),g(),k.promise}}]).run(["swaggerModules","swaggerUiExternalReferences",function(a,b){a.add(a.BEFORE_PARSE,b)}]); \ No newline at end of file diff --git a/dist/scripts/modules/swagger-xml-formatter.min.js b/dist/scripts/modules/swagger-xml-formatter.min.js index f8b022f..4b7ffc5 100644 --- a/dist/scripts/modules/swagger-xml-formatter.min.js +++ b/dist/scripts/modules/swagger-xml-formatter.min.js @@ -1,7 +1,7 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed */ -"use strict";angular.module("swaggerUi").service("swaggerUiXmlFormatter",["$q",function(a){function b(a){var b="",c=/(>)(<)(\/*)/g,d=0;return a=a.replace(c,"$1\r\n$2$3"),angular.forEach(a.split("\r\n"),function(a){var c=0,e="";a.match(/.+<\/\w[^>]*>$/)?c=0:a.match(/^<\/\w/)?0!==d&&(d-=1):c=a.match(/^<\w[^>]*[^\/]>.*$/)?1:0;for(var f=0;d>f;f++)e+=" ";b+=e+a+"\r\n",d+=c}),b}this.execute=function(c){var d=!1,e=a.defer();return c.headers&&"application/xml"===c.headers()["content-type"]&&(c.data=b(c.data),d=!0),e.resolve(d),e.promise}}]); \ No newline at end of file +"use strict";angular.module("swaggerUi").service("swaggerUiXmlFormatter",["$q",function(a){function b(a){var b="",c=/(>)(<)(\/*)/g,d=0;return a=a.replace(c,"$1\r\n$2$3"),angular.forEach(a.split("\r\n"),function(a){var c=0,e="";a.match(/.+<\/\w[^>]*>$/)?c=0:a.match(/^<\/\w/)?0!==d&&(d-=1):c=a.match(/^<\w[^>]*[^\/]>.*$/)?1:0;for(var f=0;d>f;f++)e+=" ";b+=e+a+"\r\n",d+=c}),b}this.execute=function(c){var d=!1,e=a.defer(),f=c.headers&&c.headers()["content-type"];return f&&f.toLowerCase().indexOf("/xml")>0&&(c.data=b(c.data),d=!0),e.resolve(d),e.promise}}]).run(["swaggerModules","swaggerUiXmlFormatter",function(a,b){a.add(a.AFTER_EXPLORER_LOAD,b)}]); \ No newline at end of file diff --git a/dist/scripts/modules/swagger1-to-swagger2-converter.min.js b/dist/scripts/modules/swagger1-to-swagger2-converter.min.js index d7d1a15..3fb8ec6 100644 --- a/dist/scripts/modules/swagger1-to-swagger2-converter.min.js +++ b/dist/scripts/modules/swagger1-to-swagger2-converter.min.js @@ -1,7 +1,7 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed */ -"use strict";angular.module("swaggerUi").service("swagger1ToSwagger2Converter",["$q","$http","swaggerModules",function(a,b,c){function d(d){var e=a.defer(),f={method:"GET",url:d};return c.execute(c.BEFORE_LOAD,f).then(function(){b(f).success(e.resolve).error(e.reject)})["catch"](e.reject),e.promise}function e(b,c,e){var h=e,i=h.info,k=[];i.contact={email:i.contact},i.license={name:i.license,url:i.licenseUrl},i.termsOfService=i.termsOfServiceUrl,h.paths={},h.definitions={},h.tags=[],angular.forEach(h.apis,function(a){k.push(d(c+a.path))}),a.all(k).then(function(a){angular.forEach(a,function(a){f(a,h),g(a,h),j(a,h)}),h.swagger="2.0",b.resolve(!0)})["catch"](b.reject)}function f(a,b){if(b.info.version=b.info.version||a.apiVersion,b.basePath=b.basePath||a.basePath,0===b.basePath.indexOf("http")){var c=angular.element('')[0];b.schemes=[c.protocol.replace(":","")],b.host=c.host,b.basePath=c.pathname}b.tags.push({name:a.resourcePath})}function g(a,b){var c,d;angular.forEach(a.apis,function(e){c=b.paths[e.path]=b.paths[e.path]||{},angular.forEach(e.operations,function(b){d={},c[b.method.toLowerCase()]={deprecated:b.deprecated,description:b.notes,summary:b.summary,operationId:b.nickname,produces:b.produces||a.produces,consumes:b.consumes||a.consumes,parameters:b.parameters,responses:d,tags:[a.resourcePath]},h(a,b),i(a,b,d)})})}function h(a,b){angular.forEach(b.parameters,function(b){b["in"]=b.paramType,a.models&&a.models[b.type]&&(b.schema={$ref:"#/definitions/"+b.type},delete b.type)})}function i(a,b,c){var d;angular.forEach(b.responseMessages,function(e){d=c[e.code]={description:e.message},e.responseModel?a.models&&a.models[e.responseModel]?d.schema={$ref:"#/definitions/"+e.responseModel}:d.type=e.responseModel:200===e.code&&"void"!==b.type&&(d.schema={type:b.type},"array"===b.type&&(d.schema.items={$ref:a.models&&a.models[b.items.type]?"#/definitions/"+b.items.type:b.items.type}))})}function j(a,b){var c;angular.forEach(a.models,function(d,e){b.definitions[e]=d,d.subTypes&&(angular.forEach(d.subTypes,function(b){c=a.models&&a.models[b],c&&(d.required=(d.required||[]).concat(c.required||[]),angular.forEach(c.properties,function(a,b){d.properties[b]=a}))}),delete d.subTypes),angular.forEach(d.properties,function(b){a.models&&a.models[b.type]&&(b.$ref="#/definitions/"+b.type,delete b.type),b.items&&a.models&&a.models[b.items.type]&&(b.items.$ref="#/definitions/"+b.items.type,delete b.items.type)})})}this.execute=function(b,c){var d=a.defer(),f=c.swaggerVersion;return f&&0===f.indexOf("1.")?e(d,b,c):d.resolve(!1),d.promise}}]); \ No newline at end of file +"use strict";angular.module("swaggerUi").service("swagger1ToSwagger2Converter",["$q","$http","swaggerModules",function(a,b,c){function d(d){var e=a.defer(),f={method:"GET",url:d};return c.execute(c.BEFORE_LOAD,f).then(function(){b(f).success(e.resolve).error(e.reject)})["catch"](e.reject),e.promise}function e(b,c,e){var h=e,i=h.info,k=[];i.contact={email:i.contact},i.license={name:i.license,url:i.licenseUrl},i.termsOfService=i.termsOfServiceUrl,h.paths={},h.definitions={},h.tags=[],angular.forEach(h.apis,function(a){k.push(d(c+a.path))}),a.all(k).then(function(a){angular.forEach(a,function(a){f(a,h),g(a,h),j(a,h)}),h.swagger="2.0",b.resolve(!0)})["catch"](b.reject)}function f(a,b){if(b.info.version=b.info.version||a.apiVersion,b.basePath=b.basePath||a.basePath,0===b.basePath.indexOf("http")){var c=angular.element('')[0];b.schemes=[c.protocol.replace(":","")],b.host=c.host,b.basePath=c.pathname}b.tags.push({name:a.resourcePath})}function g(a,b){var c,d;angular.forEach(a.apis,function(e){c=b.paths[e.path]=b.paths[e.path]||{},angular.forEach(e.operations,function(b){d={},c[b.method.toLowerCase()]={deprecated:b.deprecated,description:b.notes,summary:b.summary,operationId:b.nickname,produces:b.produces||a.produces,consumes:b.consumes||a.consumes,parameters:b.parameters,responses:d,tags:[a.resourcePath]},h(a,b),i(a,b,d)})})}function h(a,b){angular.forEach(b.parameters,function(b){b["in"]=b.paramType;var c=b.type||b.$ref;a.models&&c&&a.models[c]&&(b.schema={$ref:"#/definitions/"+c},delete b.type)})}function i(a,b,c){var d;angular.forEach(b.responseMessages,function(e){if(d=c[e.code]={description:e.message},e.responseModel)a.models&&a.models[e.responseModel]?d.schema={$ref:"#/definitions/"+e.responseModel}:d.type=e.responseModel;else if(200===e.code&&"void"!==b.type&&(d.schema={type:b.type},"array"===b.type)){var f=b.items.type||b.items.$ref,g=d.schema.items={};a.models&&a.models[f]?g.$ref="#/definitions/"+f:g.type=f}})}function j(a,b){var c;angular.forEach(a.models,function(d,e){b.definitions[e]=d,d.subTypes&&(angular.forEach(d.subTypes,function(b){c=a.models&&a.models[b],c&&(d.required=(d.required||[]).concat(c.required||[]),angular.forEach(c.properties,function(a,b){d.properties[b]=a}))}),delete d.subTypes),angular.forEach(d.properties,function(b){var c=b.type||b.$ref;a.models&&c&&a.models[c]&&(b.$ref="#/definitions/"+c,delete b.type),b.items&&(c=b.items.type||b.items.$ref,a.models&&c&&a.models[c]&&(b.items.$ref="#/definitions/"+c),delete b.items.type)})})}this.execute=function(b,c){var d=a.defer(),f=c.swaggerVersion;return f&&0===f.indexOf("1.")?e(d,b,c):d.resolve(!1),d.promise}}]).run(["swaggerModules","swagger1ToSwagger2Converter",function(a,b){a.add(a.BEFORE_PARSE,b)}]); \ No newline at end of file diff --git a/dist/scripts/swagger-ui.js b/dist/scripts/swagger-ui.js index cb40286..06fec48 100644 --- a/dist/scripts/swagger-ui.js +++ b/dist/scripts/swagger-ui.js @@ -1,5 +1,5 @@ /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed @@ -7,8 +7,8 @@ 'use strict'; angular - .module('swaggerUi', ['ng', 'swaggerUiTemplates']) - .directive('swaggerUi', ['$injector', function($injector) { + .module('swaggerUi', ['ng']) + .directive('swaggerUi', ["$injector", function($injector) { return { restrict: 'A', @@ -22,13 +22,11 @@ angular // "auto": (default) parser is based on response Content-Type // "json": force using JSON parser // - // More types could be defined by external modules + // More types could be defined by external modules parser: '@?', // Swagger descriptor loading indicator (variables, optional) loading: '=?', // Use permalinks? (boolean, optional, default = false) - // If true and if using $routeProvider, should set 'reloadOnSearch: false' in route - // configuration to avoid UI being rendered multiple times permalinks: '=?', // Display API explorer (boolean, optional, default = false) apiExplorer: '=?', @@ -41,164 +39,166 @@ angular // If false, Swagger validation will be disabled // If URL, will be used as Swagger validator // If not defined, validator will be 'http://online.swagger.io/validator' - validatorUrl: '@?' + validatorUrl: '@?', + // Allows defining a custom Swagger UI template (string, optional) + templateUrl: '@?' }, link: function(scope) { // check parameters - if (scope.permalinks && $injector.has('$route')) { - var $route = $injector.get('$route'); - if ($route.current && $route.current.$$route && $route.current.$$route.reloadOnSearch) { - console.warn('AngularSwaggerUI: when using permalinks you should set reloadOnSearch=false in your route config to avoid UI being rebuilt multiple times'); - } - } if (!scope.trustedSources && !$injector.has('$sanitize')) { console.warn('AngularSwaggerUI: you must use ngSanitize OR set trusted-sources=true as directive param if swagger descriptors are loaded from trusted sources'); } if (scope.validatorUrl === undefined) { scope.validatorUrl = 'http://online.swagger.io/validator'; } + if (scope.templateUrl === undefined) { + scope.templateUrl = 'templates/main.html'; + } } }; }]) - .controller('swaggerUiController', ['$scope', '$http', '$location', '$q', 'swaggerClient', 'swaggerModules', 'swagger2JsonParser', - function($scope, $http, $location, $q, swaggerClient, swaggerModules, swagger2JsonParser) { - - var swagger; - - // WARNING authentication is not implemented, please use 'api-explorer-transform' directive's param to customize API calls + .controller('swaggerUiController', ["$scope", "$http", "$location", "$q", "$anchorScroll", "$timeout", "swaggerClient", "swaggerModules", function($scope, $http, $location, $q, $anchorScroll, $timeout, swaggerClient, swaggerModules) { - // add default Swagger parser (JSON) - swaggerModules.add(swaggerModules.PARSE, swagger2JsonParser); + var swagger; - /** - * Load Swagger descriptor - */ - function loadSwagger(url, callback) { - $scope.loading = true; - var options = { - method: 'GET', - url: url - }; - swaggerModules - .execute(swaggerModules.BEFORE_LOAD, options) - .then(function() { - $http(options) - .success(callback) - .error(function(data, status) { - onError({ - code: status, - message: data - }); - }); - }) - .catch(onError); - } + // WARNING authentication is not implemented, please use 'api-explorer-transform' directive's param to customize API calls - /** - * Swagger descriptor has been loaded, launch parsing - */ - function swaggerLoaded(swaggerUrl, swaggerType) { - $scope.loading = false; - var parseResult = {}; - // execute modules - $scope.parser = $scope.parser || 'auto'; - swaggerModules - .execute(swaggerModules.PARSE, $scope.parser, swaggerUrl, swaggerType, swagger, $scope.trustedSources, parseResult) - .then(function(executed) { - if (executed) { - swaggerParsed(parseResult); - } else { + /** + * Load Swagger descriptor + */ + function loadSwagger(url, callback) { + $scope.loading = true; + var options = { + method: 'GET', + url: url + }; + swaggerModules + .execute(swaggerModules.BEFORE_LOAD, options) + .then(function() { + $http(options) + .success(callback) + .error(function(data, status) { onError({ - code: 415, - message: 'no parser found for Swagger descriptor of type ' + swaggerType + ' and version ' + swagger.swagger + code: status, + message: data }); - } - }) - .catch(onError); - } + }); + }) + .catch(onError); + } - /** - * Swagger descriptor has parsed, launch display - */ - function swaggerParsed(parseResult) { - // execute modules - swaggerModules - .execute(swaggerModules.BEFORE_DISPLAY, parseResult) - .then(function() { - // display swagger UI - $scope.infos = parseResult.infos; - $scope.form = parseResult.form; - $scope.resources = parseResult.resources; - }) - .catch(onError); - } + /** + * Swagger descriptor has been loaded, launch parsing + */ + function swaggerLoaded(swaggerUrl, swaggerType) { + $scope.loading = false; + var parseResult = {}; + // execute modules + $scope.parser = $scope.parser || 'auto'; + swaggerModules + .execute(swaggerModules.PARSE, $scope.parser, swaggerUrl, swaggerType, swagger, $scope.trustedSources, parseResult) + .then(function(executed) { + if (executed) { + swaggerParsed(parseResult); + } else { + onError({ + code: 415, + message: 'no parser found for Swagger descriptor of type ' + swaggerType + ' and version ' + swagger.swagger + }); + } + }) + .catch(onError); + } - function onError(error) { - $scope.loading = false; - if (typeof $scope.errorHandler === 'function') { - $scope.errorHandler(error.message, error.code); - } else { - console.error(error.code, 'AngularSwaggerUI: ' + error.message); - } + /** + * Swagger descriptor has parsed, launch display + */ + function swaggerParsed(parseResult) { + // execute modules + swaggerModules + .execute(swaggerModules.BEFORE_DISPLAY, parseResult) + .then(function() { + // display swagger UI + $scope.infos = parseResult.infos; + $scope.form = parseResult.form; + $scope.resources = parseResult.resources; + if ($scope.permalinks) { + $timeout(function() { + $anchorScroll(); + }, 100); + } + }) + .catch(onError); + } + + function onError(error) { + $scope.loading = false; + if (typeof $scope.errorHandler === 'function') { + $scope.errorHandler(error.message, error.code); + } else { + console.error(error.code, 'AngularSwaggerUI: ' + error.message); } + } - $scope.$watch('url', function(url) { - //reset - $scope.infos = {}; - $scope.resources = []; - $scope.form = {}; - if (url && url !== '') { - if ($scope.loading) { - //TODO cancel current loading swagger - } - // load Swagger descriptor - loadSwagger(url, function(data, status, headers) { - swagger = data; - // execute modules - swaggerModules - .execute(swaggerModules.BEFORE_PARSE, url, swagger) - .then(function() { - var contentType = headers()['content-type'] || 'application/json', - swaggerType = contentType.split(';')[0]; - - swaggerLoaded(url, swaggerType); - }) - .catch(onError); - }); + $scope.$watch('url', function(url) { + //reset + $scope.infos = {}; + $scope.resources = []; + $scope.form = {}; + if (url && url !== '') { + if ($scope.loading) { + //TODO cancel current loading swagger } - }); + // load Swagger descriptor + loadSwagger(url, function(data, status, headers) { + swagger = data; + // execute modules + swaggerModules + .execute(swaggerModules.BEFORE_PARSE, url, swagger) + .then(function() { + var contentType = headers()['content-type'] || 'application/json', + swaggerType = contentType.split(';')[0]; - /** - * show all resource's operations as list or as expanded list - */ - $scope.expand = function(resource, expandOperations) { - resource.open = true; - for (var i = 0, op = resource.operations, l = op.length; i < l; i++) { - op[i].open = expandOperations; - } - }; + swaggerLoaded(url, swaggerType); + }) + .catch(onError); + }); + } + }); - $scope.permalink = function(name) { - if ($scope.permalinks) { - $location.search('swagger', name); - } - }; + /** + * show all resource's operations as list or as expanded list + */ + $scope.expand = function(resource, expandOperations) { + resource.open = true; + for (var i = 0, op = resource.operations, l = op.length; i < l; i++) { + op[i].open = expandOperations; + } + }; - /** - * sends a sample API request - */ - $scope.submitExplorer = function(operation) { - operation.loading = true; - swaggerClient - .send(swagger, operation, $scope.form[operation.id]) - .then(function(result) { - operation.loading = false; - operation.explorerResult = result; - }); - }; + $scope.permalink = function(name) { + if ($scope.permalinks) { + $location.hash(name); + $timeout(function() { + $anchorScroll(); + }, 50); + } + }; - } - ]) + /** + * sends a sample API request + */ + $scope.submitExplorer = function(operation) { + operation.loading = true; + swaggerClient + .send(swagger, operation, $scope.form[operation.id]) + .then(function(result) { + operation.loading = false; + operation.explorerResult = result; + }); + }; + + }]) .directive('fileInput', function() { // helper to be able to retrieve HTML5 File in ngModel from input return { @@ -215,7 +215,7 @@ angular }; }); /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed @@ -224,7 +224,7 @@ angular angular .module('swaggerUi') - .service('swaggerClient', ['$q', '$http', 'swaggerModules', function($q, $http, swaggerModules) { + .service('swaggerClient', ["$q", "$http", "swaggerModules", function($q, $http, swaggerModules) { /** * format API explorer response before display @@ -260,7 +260,8 @@ angular var deferred = $q.defer(), query = {}, headers = {}, - path = operation.path; + path = operation.path, + body; // build request parameters for (var i = 0, params = operation.parameters || [], l = params.length; i < l; i++) { @@ -283,23 +284,23 @@ angular } break; case 'formData': - values.body = values.body || new FormData(); + body = body || new FormData(); if (!!value) { if (param.type === 'file') { values.contentType = undefined; // make browser defining it by himself } - values.body.append(param.name, value); + body.append(param.name, value); } break; case 'body': - values.body = values.body || value; + body = body || value; break; } } // add headers headers.Accept = values.responseType; - headers['Content-Type'] = values.body ? values.contentType : 'text/plain'; + headers['Content-Type'] = body ? values.contentType : 'text/plain'; // build request var baseUrl = [ @@ -312,7 +313,7 @@ angular method: operation.httpMethod, url: baseUrl + path, headers: headers, - data: values.body, + data: body, params: query }, callback = function(data, status, headers, config) { @@ -344,8 +345,9 @@ angular }; }]); + /* - * Orange angular-swagger-ui - v0.2.7 + * Orange angular-swagger-ui - v0.3.0 * * (C) 2015 Orange, all right reserved * MIT Licensed @@ -493,7 +495,17 @@ angular * generates object's model */ var generateModel = this.generateModel = function(swagger, schema, modelName, currentGenerated) { - var model = ''; + var model = '', + buffer, + submodels, + propertyName, + property, + hasProperties = false, + name, + className, + def, + sub; + currentGenerated = currentGenerated || {}; // used to handle circular references function isRequired(item, name) { @@ -503,15 +515,15 @@ angular if (schema.properties) { modelName = modelName || ('Inline Model' + countInLine++); currentGenerated[modelName] = true; - var buffer = ['