swagger-ui
Advanced tools
Comparing version 2.1.1-M2 to 2.1.1
{ | ||
"name": "swagger-ui", | ||
"main": "dist/index.html", | ||
"version": "2.1.8-M1", | ||
"authors": [ | ||
@@ -16,3 +15,3 @@ "Mohsen Azimi <me@azimi.me>" | ||
], | ||
"license": "Copyright 2015 Reverb Technologies, Inc.", | ||
"license": "Copyright 2015 SmartBear Software", | ||
"homepage": "http://swagger.io", | ||
@@ -19,0 +18,0 @@ "private": true, |
## Pull Requests | ||
Plase make your pull requests are made to the [**`develop_2.0`**](https://github.com/swagger-api/swagger-ui/tree/develop_2.0) branch at this time. | ||
Please open your pull requests against the [**`develop_2.0`**](https://github.com/swagger-api/swagger-ui/tree/develop_2.0) branch at this time. | ||
@@ -4,0 +4,0 @@ ## Issues |
@@ -8,2 +8,4 @@ var appName; | ||
var redirect_uri; | ||
var clientSecret; | ||
var scopeSeparator; | ||
@@ -44,2 +46,3 @@ function handleLogin() { | ||
$('.api-popup-dialog').remove(); | ||
popupDialog = $( | ||
@@ -156,3 +159,3 @@ [ | ||
url += '&client_id=' + encodeURIComponent(clientId); | ||
url += '&scope=' + encodeURIComponent(scopes.join(' ')); | ||
url += '&scope=' + encodeURIComponent(scopes.join(scopeSeparator)); | ||
url += '&state=' + encodeURIComponent(state); | ||
@@ -190,3 +193,5 @@ | ||
clientId = (o.clientId||errors.push('missing client id')); | ||
clientSecret = (o.clientSecret||errors.push('missing client secret')); | ||
realm = (o.realm||errors.push('missing realm')); | ||
scopeSeparator = (o.scopeSeparator||' '); | ||
@@ -213,2 +218,3 @@ if(errors.length > 0){ | ||
'client_id': clientId, | ||
'client_secret': clientSecret, | ||
'code': data.code, | ||
@@ -248,3 +254,3 @@ 'grant_type': 'authorization_code', | ||
var o = null; | ||
$.each($('.auth #api_information_panel'), function(k, v) { | ||
$.each($('.auth .api-ic .api_information_panel'), function(k, v) { | ||
var children = v; | ||
@@ -266,3 +272,3 @@ if(children && children.childNodes) { | ||
if(diff.length > 0){ | ||
o = v.parentNode; | ||
o = v.parentNode.parentNode; | ||
$(o.parentNode).find('.api-ic.ic-on').addClass('ic-off'); | ||
@@ -276,3 +282,3 @@ $(o.parentNode).find('.api-ic.ic-on').removeClass('ic-on'); | ||
else { | ||
o = v.parentNode; | ||
o = v.parentNode.parentNode; | ||
$(o.parentNode).find('.api-ic.ic-off').addClass('ic-on'); | ||
@@ -292,2 +298,2 @@ $(o.parentNode).find('.api-ic.ic-off').removeClass('ic-off'); | ||
} | ||
} | ||
} |
@@ -18,2 +18,3 @@ 'use strict'; | ||
var order = require('gulp-order'); | ||
var jshint = require('gulp-jshint'); | ||
var banner = ['/**', | ||
@@ -53,5 +54,14 @@ ' * <%= pkg.name %> - <%= pkg.description %>', | ||
/** | ||
* JShint all *.js files | ||
*/ | ||
gulp.task('lint', function () { | ||
return gulp.src('./src/main/javascript/**/*.js') | ||
.pipe(jshint()) | ||
.pipe(jshint.reporter('jshint-stylish')); | ||
}); | ||
/** | ||
* Build a distribution | ||
*/ | ||
gulp.task('dist', ['clean'], function() { | ||
gulp.task('dist', ['clean','lint'], function() { | ||
@@ -87,3 +97,4 @@ return es.merge( | ||
'./src/main/less/print.less', | ||
'./src/main/less/reset.less' | ||
'./src/main/less/reset.less', | ||
'./src/main/less/style.less' | ||
]) | ||
@@ -108,2 +119,8 @@ .pipe(less()) | ||
// copy `lang` for translations | ||
gulp | ||
.src(['./lang/**/*.js']) | ||
.pipe(gulp.dest('./dist/lang')) | ||
.on('error', log); | ||
// copy all files inside html folder | ||
@@ -110,0 +127,0 @@ gulp |
@@ -8,2 +8,4 @@ var appName; | ||
var redirect_uri; | ||
var clientSecret; | ||
var scopeSeparator; | ||
@@ -44,2 +46,3 @@ function handleLogin() { | ||
$('.api-popup-dialog').remove(); | ||
popupDialog = $( | ||
@@ -156,3 +159,3 @@ [ | ||
url += '&client_id=' + encodeURIComponent(clientId); | ||
url += '&scope=' + encodeURIComponent(scopes.join(' ')); | ||
url += '&scope=' + encodeURIComponent(scopes.join(scopeSeparator)); | ||
url += '&state=' + encodeURIComponent(state); | ||
@@ -190,3 +193,5 @@ | ||
clientId = (o.clientId||errors.push('missing client id')); | ||
clientSecret = (o.clientSecret||errors.push('missing client secret')); | ||
realm = (o.realm||errors.push('missing realm')); | ||
scopeSeparator = (o.scopeSeparator||' '); | ||
@@ -213,2 +218,3 @@ if(errors.length > 0){ | ||
'client_id': clientId, | ||
'client_secret': clientSecret, | ||
'code': data.code, | ||
@@ -248,3 +254,3 @@ 'grant_type': 'authorization_code', | ||
var o = null; | ||
$.each($('.auth #api_information_panel'), function(k, v) { | ||
$.each($('.auth .api-ic .api_information_panel'), function(k, v) { | ||
var children = v; | ||
@@ -266,3 +272,3 @@ if(children && children.childNodes) { | ||
if(diff.length > 0){ | ||
o = v.parentNode; | ||
o = v.parentNode.parentNode; | ||
$(o.parentNode).find('.api-ic.ic-on').addClass('ic-off'); | ||
@@ -276,3 +282,3 @@ $(o.parentNode).find('.api-ic.ic-on').removeClass('ic-on'); | ||
else { | ||
o = v.parentNode; | ||
o = v.parentNode.parentNode; | ||
$(o.parentNode).find('.api-ic.ic-off').addClass('ic-on'); | ||
@@ -292,2 +298,2 @@ $(o.parentNode).find('.api-ic.ic-off').removeClass('ic-off'); | ||
} | ||
} | ||
} |
{ | ||
"name": "swagger-ui", | ||
"author": "Tony Tam <fehguy@gmail.com>", | ||
"contributors": [{ | ||
"name": "Mohsen Azimi", | ||
"email": "me@azimi.me" | ||
}], | ||
"contributors": [ | ||
{ | ||
"name": "Mohsen Azimi", | ||
"email": "me@azimi.me" | ||
} | ||
], | ||
"description": "Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API", | ||
"version": "2.1.1-M2", | ||
"version": "2.1.1", | ||
"homepage": "http://swagger.io", | ||
"license": "Apache 2.0", | ||
"license": "Apache-2.0", | ||
"main": "dist/swagger-ui.js", | ||
"scripts": { | ||
@@ -38,2 +41,3 @@ "build": "gulp", | ||
"gulp-header": "^1.2.2", | ||
"gulp-jshint": "^1.10.0", | ||
"gulp-less": "^3.0.1", | ||
@@ -46,7 +50,8 @@ "gulp-order": "^1.1.1", | ||
"http-server": "git+https://github.com/nodeapps/http-server.git", | ||
"jshint-stylish": "^1.0.1", | ||
"less": "^2.4.0", | ||
"mocha": "^2.1.0", | ||
"selenium-webdriver": "^2.45.0", | ||
"swagger-client": "2.1.2-M2" | ||
"swagger-client": "2.1.2" | ||
} | ||
} |
@@ -23,3 +23,3 @@ # Swagger UI | ||
------------------ | ------------ | -------------------------- | ----- | ------ | ||
2.1.1-M2 | 2015-04-16 | 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-ui) | | ||
2.1.1 | 2015-06-06 | 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-ui) | | ||
2.0.24 | 2014-09-12 | 1.1, 1.2 | [tag v2.0.24](https://github.com/swagger-api/swagger-ui/tree/v2.0.24) | | ||
@@ -100,4 +100,5 @@ 1.0.13 | 2013-03-08 | 1.1, 1.2 | [tag v1.0.13](https://github.com/swagger-api/swagger-ui/tree/v1.0.13) | | ||
highlightSizeThreshold | Any size response below this threshold will be highlighted syntactically, attempting to highlight large responses can lead to browser hangs, not including a threshold will default to highlight all returned responses. | ||
supportedSubmitMethods | An array of of the HTTP operations that will have the 'Try it out!` option. An empty array disables all operations. This does not filter the operations from the display. | ||
supportedSubmitMethods | An array of of the HTTP operations that will have the 'Try it out!' option. An empty array disables all operations. This does not filter the operations from the display. | ||
oauth2RedirectUrl | OAuth redirect URL | ||
showRequestHeaders | Whether or not to show the headers that were sent when making a request via the 'Try it out!' option. Defaults to `false`. | ||
@@ -136,3 +137,3 @@ * All other parameters are explained in greater detail below | ||
### Localization and translation | ||
The localization files are in the dist/lang directory. | ||
The localization files are in the [lang](/lang) directory. Note that language files and translator is not included in SwaggerUI by default. You need to add them manually. | ||
@@ -162,2 +163,3 @@ To enable translation you should append next two lines in your Swagger's index.html (or another entry point you use) | ||
## CORS Support | ||
### OR: How to deal with "Can't read from server. It may not have the appropriate access-control-origin settings." | ||
@@ -230,7 +232,7 @@ CORS is a technique to prevent websites from doing bad things with your personal data. Most browsers + javascript toolkits not only support CORS but enforce it, which has implications for your API server which supports Swagger. | ||
## Change Log | ||
Plsee see [releases](https://github.com/swagger-api/swagger-ui/releases) for change log. | ||
Please see [releases](https://github.com/swagger-api/swagger-ui/releases) for change log. | ||
## License | ||
Copyright 2011-2015 Reverb technologies, Inc. | ||
Copyright 2011-2015 SmartBear Software | ||
@@ -237,0 +239,0 @@ Licensed under the Apache License, Version 2.0 (the "License"); |
@@ -96,7 +96,9 @@ 'use strict'; | ||
case 1: | ||
// Expand all operations for the resource and scroll to it | ||
var dom_id = 'resource_' + fragments[0]; | ||
if (fragments[0].length > 0) { // prevent matching "#/" | ||
// 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}); | ||
Docs.expandEndpointListForResource(fragments[0]); | ||
$("#"+dom_id).slideto({highlight: false}); | ||
} | ||
break; | ||
@@ -103,0 +105,0 @@ case 2: |
@@ -7,2 +7,43 @@ 'use strict'; | ||
return new Handlebars.SafeString(html); | ||
}); | ||
}); | ||
Handlebars.registerHelper('renderTextParam', function(param) { | ||
var result, type = 'text', idAtt = ''; | ||
var isArray = param.type.toLowerCase() === 'array' || param.allowMultiple; | ||
var defaultValue = isArray && Array.isArray(param.default) ? param.default.join('\n') : param.default; | ||
var dataVendorExtensions = Object.keys(param).filter(function(property) { | ||
// filter X-data- properties | ||
return property.match(/^X-data-/i) !== null; | ||
}).reduce(function(result, property) { | ||
// remove X- from property name, so it results in html attributes like data-foo='bar' | ||
return result += ' ' + property.substring(2, property.length) + '=\'' + param[property] + '\''; | ||
}, ''); | ||
if (typeof defaultValue === 'undefined') { | ||
defaultValue = ''; | ||
} | ||
if(param.format && param.format === 'password') { | ||
type = 'password'; | ||
} | ||
if(param.valueId) { | ||
idAtt = ' id=\'' + param.valueId + '\''; | ||
} | ||
if(isArray) { | ||
result = '<textarea class=\'body-textarea' + (param.required ? ' required' : '') + '\' name=\'' + param.name + '\'' + idAtt + dataVendorExtensions; | ||
result += ' placeholder=\'Provide multiple values in new lines' + (param.required ? ' (at least one required).' : '.') + '\'>'; | ||
result += defaultValue + '</textarea>'; | ||
} else { | ||
var parameterClass = 'parameter'; | ||
if(param.required) { | ||
parameterClass += ' required'; | ||
} | ||
result = '<input class=\'' + parameterClass + '\' minlength=\'' + (param.required ? 1 : 0) + '\''; | ||
result += ' name=\'' + param.name +'\' placeholder=\'' + (param.required ? '(required)' : '') + '\'' + idAtt + dataVendorExtensions; | ||
result += ' type=\'' + type + '\' value=\'' + defaultValue + '\'/>'; | ||
} | ||
return new Handlebars.SafeString(result); | ||
}); |
@@ -16,2 +16,5 @@ 'use strict'; | ||
options = options || {}; | ||
if(!options.highlightSizeThreshold) { | ||
options.highlightSizeThreshold = 100000; | ||
} | ||
@@ -91,3 +94,5 @@ // Allow dom_id to be overridden | ||
} | ||
if(this.api) { | ||
this.options.authorizations = this.api.clientAuthorizations.authz; | ||
} | ||
this.options.url = url; | ||
@@ -173,5 +178,9 @@ this.headerView.update(url); | ||
} | ||
$('#message-bar').removeClass('message-fail'); | ||
$('#message-bar').addClass('message-success'); | ||
$('#message-bar').html(data); | ||
var $msgbar = $('#message-bar'); | ||
$msgbar.removeClass('message-fail'); | ||
$msgbar.addClass('message-success'); | ||
$msgbar.html(data); | ||
if(window.SwaggerTranslator) { | ||
window.SwaggerTranslator.translate($msgbar); | ||
} | ||
}, | ||
@@ -187,3 +196,3 @@ | ||
var val = $('#message-bar').html(data); | ||
var val = $('#message-bar').text(data); | ||
@@ -202,2 +211,6 @@ if (this.options.onFailure) { | ||
}); | ||
$('.propDesc', '.model-signature .description').each(function () { | ||
$(this).html(marked($(this).html())).addClass('markdown'); | ||
}); | ||
} | ||
@@ -252,3 +265,3 @@ | ||
// Node. Does not work with strict CommonJS, but | ||
// only CommonJS-like enviroments that support module.exports, | ||
// only CommonJS-like environments that support module.exports, | ||
// like Node. | ||
@@ -262,2 +275,2 @@ module.exports = factory(require('b')); | ||
return SwaggerUi; | ||
})); | ||
})); |
@@ -7,8 +7,6 @@ 'use strict'; | ||
render: function(){ | ||
this.model.contentTypeId = 'ct' + Math.random(); | ||
$(this.el).html(Handlebars.templates.content_type(this.model)); | ||
$('label[for=contentType]', $(this.el)).text('Response Content Type'); | ||
return this; | ||
} | ||
}); |
@@ -6,3 +6,2 @@ 'use strict'; | ||
'click #show-pet-store-icon' : 'showPetStore', | ||
'click #show-wordnik-dev-icon' : 'showWordnikDev', | ||
'click #explore' : 'showCustom', | ||
@@ -21,8 +20,2 @@ 'keyup #input_baseUrl' : 'showCustomOnKeyup', | ||
showWordnikDev: function(){ | ||
this.trigger('update-swagger-ui', { | ||
url: 'http://api.wordnik.com/v4/resources.json' | ||
}); | ||
}, | ||
showCustomOnKeyup: function(e){ | ||
@@ -29,0 +22,0 @@ if (e.keyCode === 13) { |
@@ -57,18 +57,16 @@ 'use strict'; | ||
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 = window.location.protocol + '//online.swagger.io/validator'; | ||
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 | ||
if(window.location.protocol === 'https:') { | ||
this.model.validatorUrl = 'https://online.swagger.io/validator'; | ||
} | ||
else { | ||
this.model.validatorUrl = 'http://online.swagger.io/validator'; | ||
} | ||
} | ||
@@ -134,3 +132,3 @@ }, | ||
}); | ||
$('#resources').append(resourceView.render().el); | ||
$('#resources', this.el).append(resourceView.render().el); | ||
}, | ||
@@ -137,0 +135,0 @@ |
@@ -12,3 +12,3 @@ 'use strict'; | ||
'mouseenter .api-ic' : 'mouseEnter', | ||
'mouseout .api-ic' : 'mouseExit', | ||
'dblclick .curl' : 'selectText', | ||
}, | ||
@@ -26,2 +26,20 @@ | ||
selectText: function(event) { | ||
var doc = document, | ||
text = event.target.firstChild, | ||
range, | ||
selection; | ||
if (doc.body.createTextRange) { | ||
range = document.body.createTextRange(); | ||
range.moveToElementText(text); | ||
range.select(); | ||
} else if (window.getSelection) { | ||
selection = window.getSelection(); | ||
range = document.createRange(); | ||
range.selectNodeContents(text); | ||
selection.removeAllRanges(); | ||
selection.addRange(range); | ||
} | ||
}, | ||
mouseEnter: function(e) { | ||
@@ -58,9 +76,4 @@ var elem = $(this.el).find('.content'); | ||
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 | ||
@@ -82,18 +95,19 @@ // TODO: redactor | ||
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); | ||
if (key === auth.name) { | ||
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); | ||
} | ||
} | ||
@@ -167,2 +181,6 @@ } | ||
} | ||
var opts = this.options.swaggerOptions; | ||
if (opts.showRequestHeaders) { | ||
this.model.showRequestHeaders = true; | ||
} | ||
$(this.el).html(Handlebars.templates.operation(this.model)); | ||
@@ -249,3 +267,3 @@ if (signatureModel) { | ||
submitOperation: function(e) { | ||
var error_free, form, isFileUpload, l, len, len1, len2, m, map, n, o, opts, ref1, ref2, ref3, val; | ||
var error_free, form, isFileUpload, map, opts; | ||
if (e !== null) { | ||
@@ -284,34 +302,27 @@ e.preventDefault(); | ||
}); | ||
form.find('select.required').each(function() { | ||
$(this).removeClass('error'); | ||
if (this.selectedIndex === -1) { | ||
$(this).addClass('error'); | ||
$(this).wiggle({ | ||
callback: (function(_this) { | ||
return function() { | ||
$(_this).focus(); | ||
}; | ||
})(this) | ||
}); | ||
error_free = false; | ||
} | ||
}); | ||
if (error_free) { | ||
map = {}; | ||
map = this.getInputMap(form); | ||
isFileUpload = this.isFileUpload(form); | ||
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 (this.options.swaggerOptions) { | ||
for(var key in this.options.swaggerOptions) { | ||
opts[key] = this.options.swaggerOptions[key]; | ||
} | ||
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(); | ||
@@ -321,5 +332,12 @@ opts.requestContentType = $('div select[name=parameterContentType]', $(this.el)).val(); | ||
if (isFileUpload) { | ||
return this.handleFileUpload(map, form); | ||
$('.request_url', $(this.el)).html('<pre></pre>'); | ||
$('.request_url pre', $(this.el)).text(this.invocationUrl); | ||
opts.useJQuery = true; | ||
map.parameterContentType = 'multipart/form-data'; | ||
return this.model.execute(map, opts, this.showCompleteStatus, this.showErrorStatus, this); | ||
} else { | ||
return this.model['do'](map, opts, this.showCompleteStatus, this.showErrorStatus, this); | ||
this.map = map; | ||
return this.model.execute(map, opts, this.showCompleteStatus, this.showErrorStatus, this); | ||
} | ||
@@ -329,11 +347,6 @@ } | ||
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, p, param, params, ref1, ref2, ref3, ref4; | ||
ref1 = form.serializeArray(); | ||
getInputMap: function (form) { | ||
var map, ref1, l, len, o, ref2, m, len1, val, ref3, n, len2; | ||
map = {}; | ||
ref1 = form.find('input'); | ||
for (l = 0, len = ref1.length; l < len; l++) { | ||
@@ -344,65 +357,43 @@ o = ref1[l]; | ||
} | ||
if (o.type === 'file') { | ||
map[o.name] = o.files[0]; | ||
} | ||
} | ||
bodyParam = new FormData(); | ||
params = 0; | ||
ref2 = this.model.parameters; | ||
ref2 = form.find('textarea'); | ||
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]); | ||
} | ||
o = ref2[m]; | ||
val = this.getTextAreaValue(o); | ||
if ((val !== null) && jQuery.trim(val).length > 0) { | ||
map[o.name] = val; | ||
} | ||
} | ||
headerParams = {}; | ||
ref3 = this.model.parameters; | ||
ref3 = form.find('select'); | ||
for (n = 0, len2 = ref3.length; n < len2; n++) { | ||
param = ref3[n]; | ||
if (param.paramType === 'header') { | ||
headerParams[param.name] = map[param.name]; | ||
o = ref3[n]; | ||
val = this.getSelectedValue(o); | ||
if ((val !== null) && jQuery.trim(val).length > 0) { | ||
map[o.name] = val; | ||
} | ||
} | ||
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; | ||
return map; | ||
}, | ||
isFileUpload: function (form) { | ||
var ref1, l, len, o; | ||
var isFileUpload = false; | ||
ref1 = form.find('input'); | ||
for (l = 0, len = ref1.length; l < len; l++) { | ||
o = ref1[l]; | ||
if (o.type === 'file') { | ||
isFileUpload = true; | ||
} | ||
} | ||
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('<pre></pre>'); | ||
$('.request_url pre', $(this.el)).text(this.invocationUrl); | ||
return isFileUpload; | ||
}, | ||
// TODO: don't use jQuery. Use SwaggerJS for handling the call. | ||
var 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) | ||
}; | ||
jQuery.ajax(obj); | ||
return false; | ||
// end of file-upload nastiness | ||
success: function(response, parent) { | ||
parent.showCompleteStatus(response); | ||
}, | ||
// wraps a jquery response as a shred response | ||
wrap: function(data) { | ||
@@ -562,2 +553,3 @@ var h, headerArray, headers, i, l, len, o; | ||
var headers = response.headers; | ||
content = jQuery.trim(content); | ||
@@ -622,6 +614,6 @@ // if server is nice, and sends content-type back, we can use it | ||
// Download | ||
} else if (headers['Content-Disposition'].test(/attachment/) || | ||
headers['content-disposition'].test(/attachment/) || | ||
headers['Content-Description'].test(/File Transfer/) || | ||
headers['content-description'].test(/File Transfer/)) { | ||
} else if (headers['Content-Disposition'] && (/attachment/).test(headers['Content-Disposition']) || | ||
headers['content-disposition'] && (/attachment/).test(headers['content-disposition']) || | ||
headers['Content-Description'] && (/File Transfer/).test(headers['Content-Description']) || | ||
headers['content-description'] && (/File Transfer/).test(headers['content-description'])) { | ||
@@ -663,7 +655,23 @@ if ('Blob' in window) { | ||
$('.response_throbber', $(this.el)).hide(); | ||
var response_body_el = $('.response_body', $(this.el))[0]; | ||
//adds curl output | ||
var curlCommand = this.model.asCurl(this.map); | ||
curlCommand = curlCommand.replace('!', '!'); | ||
$( '.curl', $(this.el)).html('<pre>' + curlCommand + '</pre>'); | ||
// only highlight the response if response is less than threshold, default state is highlight response | ||
var opts = this.options.swaggerOptions; | ||
if (opts.highlightSizeThreshold && response.data.length > opts.highlightSizeThreshold) { | ||
if (opts.showRequestHeaders) { | ||
var form = $('.sandbox', $(this.el)), | ||
map = this.getInputMap(form), | ||
requestHeaders = this.model.getHeaderParams(map); | ||
delete requestHeaders['Content-Type']; | ||
$('.request_headers', $(this.el)).html('<pre>' + _.escape(JSON.stringify(requestHeaders, null, ' ')).replace(/\n/g, '<br>') + '</pre>'); | ||
} | ||
var response_body_el = $('.response_body', $(this.el))[0]; | ||
// only highlight the response if response is less than threshold, default state is highlight response | ||
if (opts.highlightSizeThreshold && typeof response.data !== 'undefined' && response.data.length > opts.highlightSizeThreshold) { | ||
return response_body_el; | ||
@@ -675,5 +683,7 @@ } else { | ||
toggleOperationContent: function() { | ||
toggleOperationContent: function (event) { | ||
var elem = $('#' + Docs.escapeResourceName(this.parentId + '_' + this.nickname + '_content')); | ||
if (elem.is(':visible')){ | ||
event.preventDefault(); | ||
$.bbq.pushState('#/', 2); | ||
Docs.collapseOperation(elem); | ||
@@ -683,3 +693,36 @@ } else { | ||
} | ||
}, | ||
getTextAreaValue: function(textArea) { | ||
var param, parsed, result, i; | ||
if (textArea.value === null || jQuery.trim(textArea.value).length === 0) { | ||
return null; | ||
} | ||
param = this.getParamByName(textArea.name); | ||
if (param && param.type && param.type.toLowerCase() === 'array') { | ||
parsed = textArea.value.split('\n'); | ||
result = []; | ||
for (i = 0; i < parsed.length; i++) { | ||
if (parsed[i] !== null && jQuery.trim(parsed[i]).length > 0) { | ||
result.push(parsed[i]); | ||
} | ||
} | ||
return result.length > 0 ? result : null; | ||
} else { | ||
return textArea.value; | ||
} | ||
}, | ||
getParamByName: function(name) { | ||
var i; | ||
if (this.model.parameters) { | ||
for(i = 0; i < this.model.parameters.length; i++) { | ||
if (this.model.parameters[i].name === name) { | ||
return this.model.parameters[i]; | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
}); |
@@ -7,6 +7,4 @@ 'use strict'; | ||
render: function(){ | ||
this.model.parameterContentTypeId = 'pct' + Math.random(); | ||
$(this.el).html(Handlebars.templates.parameter_content_type(this.model)); | ||
$('label[for=parameterContentType]', $(this.el)).text('Parameter content type:'); | ||
return this; | ||
@@ -13,0 +11,0 @@ } |
@@ -7,5 +7,5 @@ 'use strict'; | ||
if (param.type.toLowerCase() === 'array' || param.allowMultiple) { | ||
opts.fn(this); | ||
return opts.fn(this); | ||
} else { | ||
opts.inverse(this); | ||
return opts.inverse(this); | ||
} | ||
@@ -34,4 +34,11 @@ }); | ||
this.model.isFile = type && type.toLowerCase() === 'file'; | ||
this.model.default = (this.model.default || this.model.defaultValue); | ||
// Allow for default === false | ||
if(typeof this.model.default === 'undefined') { | ||
this.model.default = this.model.defaultValue; | ||
} | ||
this.model.hasDefault = (typeof this.model.default !== 'undefined'); | ||
this.model.valueId = 'm' + this.model.name + Math.random(); | ||
if (this.model.allowableValues) { | ||
@@ -103,2 +110,2 @@ this.model.isList = true; | ||
} | ||
}); | ||
}); |
@@ -7,8 +7,6 @@ 'use strict'; | ||
render: function(){ | ||
this.model.responseContentTypeId = 'rct' + Math.random(); | ||
$(this.el).html(Handlebars.templates.response_content_type(this.model)); | ||
$('label[for=responseContentType]', $(this.el)).text('Response Content Type'); | ||
return this; | ||
} | ||
}); |
@@ -55,3 +55,5 @@ 'use strict'; | ||
var textArea = $('textarea', $(this.el.parentNode.parentNode.parentNode)); | ||
if ($.trim(textArea.val()) === '') { | ||
// Fix for bug in IE 10/11 which causes placeholder text to be copied to "value" | ||
if ($.trim(textArea.val()) === '' || textArea.prop('placeholder') === textArea.val()) { | ||
textArea.val(this.model.sampleJSON); | ||
@@ -58,0 +60,0 @@ } |
@@ -55,3 +55,3 @@ { | ||
"description": "This is a sample server Petstore server. You can find out more about Swagger \n at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample,\n you can use the api key \"special-key\" to test the authorization filters", | ||
"termsOfServiceUrl": "http://helloreverb.com/terms/", | ||
"termsOfServiceUrl": "http://swagger.io/terms/", | ||
"contact": "apiteam@swagger.io", | ||
@@ -58,0 +58,0 @@ "license": "Apache 2.0", |
@@ -7,3 +7,3 @@ { | ||
"title": "Swagger Petstore", | ||
"termsOfService": "http://helloreverb.com/terms/", | ||
"termsOfService": "http://swagger.io/terms/", | ||
"contact": { | ||
@@ -598,3 +598,4 @@ "url": "http://swagger.io", | ||
"required": false, | ||
"type": "string" | ||
"type": "string", | ||
"format": "password" | ||
} | ||
@@ -601,0 +602,0 @@ ], |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
High entropy strings
Supply chain riskContains high entropy strings. This could be a sign of encrypted data, leaked secrets or obfuscated code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
4424538
145
47512
3
243
25
1
6