Compare commits

...
17 Commits
Author SHA1 Message Date
Tony Tam 855b31d73b switched to snippet view #491 2014-07-12 20:30:28 -07:00
Tony Tam 7945dec86c updated versions, swagger-js 2014-07-12 20:14:38 -07:00
Tony Tam 011f70935d fixed #340 with empty body, updated swagger-js 2014-07-10 22:36:41 -07:00
Tony Tam f0a099728c Merge branch 'master' of github.com:wordnik/swagger-ui 2014-07-03 12:19:47 -07:00
Tony Tam d673d5d1cb Merge pull request #479 from tillig/patch-2
Fix handling for jQuery response headers
2014-06-17 17:36:19 -07:00
Travis Illig 8ad843fc4f Fix handling for jQuery response headers
Fixes the way response headers are parsed when using the jQuery client. Enables the response headers to be properly viewed in the UI. Previous logic consistently returned an empty set of headers. Includes minor changes to allow the use of JS strict mode, at least for this function.
2014-06-17 15:23:22 -07:00
Tony Tam 1b89ab4128 Merge pull request #477 from paladox2015/patch-3
Update underscore-min.js
2014-06-17 10:53:32 -07:00
Tony Tam bfc0c987df Merge pull request #478 from tillig/patch-1
Fix handling for jQuery response headers
2014-06-17 10:45:42 -07:00
Travis Illig e250ab3e66 Fix handling for jQuery response headers
Fixes the way response headers are parsed when using the jQuery client. Enables the response headers to be properly viewed in the UI. Previous logic consistently returned an empty set of headers. Includes minor changes to allow the use of JS strict mode, at least for this function.
2014-06-17 09:46:12 -07:00
paladox2015 25c33cb472 Update underscore-min.js 2014-06-17 12:59:06 +01:00
Tony Tam b8e4317929 updated to support explicit keys 2014-06-12 17:50:23 -07:00
Tony Tam c2dd77ff3a Merge pull request #435 from JoergAdler/master
The list of scopes now RFC6749 Sec.3.3 compliant
2014-06-01 16:35:58 -07:00
Tony Tam 4b535adcb7 bumped version 2014-05-14 09:45:38 -04:00
Tony Tam 05588bb669 fix for upload with no files 2014-05-14 09:45:18 -04:00
Tony Tam f7694d8525 updated with version number 2014-04-30 09:30:59 -07:00
Samuel Raghunath d96fd58016 Updated index.html to include css links for print media 2014-04-29 14:49:51 -04:00
Jörg Adler 52db742a10 The list of scopes now RFC6749 Sec.3.3 compliant
See http://tools.ietf.org/html/rfc6749#section-3.3 for details.

The callback url is now determined correctly if the swagger index.html file and
therefore the o2c.html is not in root directory of the host.

Also the popup opens more than one authorization-request-tab in firefox
(seems to append the on-click js method instead of replacing it)
2014-04-03 12:31:02 +02:00
11 changed files with 291 additions and 178 deletions
+3 -1
View File
@@ -2,9 +2,11 @@
<html>
<head>
<title>Swagger UI</title>
<link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
<link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>
<script type="text/javascript" src="lib/shred.bundle.js"></script>
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
+54 -47
View File
@@ -48,65 +48,72 @@ function handleLogin() {
str += '</label></li>';
popup.append(str);
}
}
var $win = $(window),
dw = $win.width(),
dh = $win.height(),
st = $win.scrollTop(),
dlgWd = popupDialog.outerWidth(),
dlgHt = popupDialog.outerHeight(),
top = (dh -dlgHt)/2 + st,
left = (dw - dlgWd)/2;
var $win = $(window),
dw = $win.width(),
dh = $win.height(),
st = $win.scrollTop(),
dlgWd = popupDialog.outerWidth(),
dlgHt = popupDialog.outerHeight(),
top = (dh -dlgHt)/2 + st,
left = (dw - dlgWd)/2;
popupDialog.css({
top: (top < 0? 0 : top) + 'px',
left: (left < 0? 0 : left) + 'px'
});
popupDialog.css({
top: (top < 0? 0 : top) + 'px',
left: (left < 0? 0 : left) + 'px'
});
popupDialog.find('button.api-popup-cancel').click(function() {
popupMask.hide();
popupDialog.hide();
});
popupDialog.find('button.api-popup-authbtn').click(function() {
popupMask.hide();
popupDialog.hide();
popupDialog.find('button.api-popup-cancel').click(function() {
popupMask.hide();
popupDialog.hide();
});
popupDialog.find('button.api-popup-authbtn').click(function() {
popupMask.hide();
popupDialog.hide();
var authSchemes = window.swaggerUi.api.authSchemes;
var host = window.location;
var redirectUrl = host.protocol + '//' + host.host + "/o2c.html";
var url = null;
var authSchemes = window.swaggerUi.api.authSchemes;
var location = window.location;
var locationUrl = location.protocol + '//' + location.host + location.pathname;
var redirectUrl = locationUrl.replace("index.html","").concat("/o2c.html").replace("//o2c.html","/o2c.html");
var url = null;
var p = window.swaggerUi.api.authSchemes;
for (var key in p) {
if (p.hasOwnProperty(key)) {
var o = p[key].grantTypes;
for(var t in o) {
if(o.hasOwnProperty(t) && t === 'implicit') {
var dets = o[t];
url = dets.loginEndpoint.url + "?response_type=token";
window.swaggerUi.tokenName = dets.tokenName;
var p = window.swaggerUi.api.authSchemes;
for (var key in p) {
if (p.hasOwnProperty(key)) {
var o = p[key].grantTypes;
for(var t in o) {
if(o.hasOwnProperty(t) && t === 'implicit') {
var dets = o[t];
url = dets.loginEndpoint.url + "?response_type=token";
window.swaggerUi.tokenName = dets.tokenName;
}
}
}
}
}
var scopes = []
var o = $('.api-popup-scopes').find('input:checked');
var scopes = [];
var scopeForUrl='';
var o = $('.api-popup-scopes').find('input:checked');
for(k =0; k < o.length; k++) {
scopes.push($(o[k]).attr("scope"));
}
for(var k =0; k < o.length; k++) {
scopes.push($(o[k]).attr("scope"));
if(k > 0){
scopeForUrl+=' ';
}
scopeForUrl+=$(o[k]).attr("scope");
}
window.enabledScopes=scopes;
window.enabledScopes=scopes;
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
url += '&realm=' + encodeURIComponent(realm);
url += '&client_id=' + encodeURIComponent(clientId);
url += '&scope=' + encodeURIComponent(scopes);
window.open(url);
});
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
url += '&realm=' + encodeURIComponent(realm);
url += '&client_id=' + encodeURIComponent(clientId);
url += '&scope=' + encodeURIComponent(scopeForUrl);
window.open(url);
});
}
popupMask.show();
popupDialog.show();
return;
+78 -36
View File
@@ -1,5 +1,5 @@
// swagger.js
// version 2.0.30
// version 2.0.31
var __bind = function(fn, me){
return function(){
@@ -57,24 +57,24 @@ Object.keys = Object.keys || (function () {
'constructor'
],
DontEnumsLength = DontEnums.length;
return function (o) {
if (typeof o != "object" && typeof o != "function" || o === null)
throw new TypeError("Object.keys called on a non-object");
var result = [];
for (var name in o) {
if (hasOwnProperty.call(o, name))
result.push(name);
}
if (hasDontEnumBug) {
for (var i = 0; i < DontEnumsLength; i++) {
if (hasOwnProperty.call(o, DontEnums[i]))
result.push(DontEnums[i]);
}
}
}
return result;
};
})();
@@ -87,6 +87,7 @@ var SwaggerApi = function(url, options) {
this.authorizations = null;
this.authorizationScheme = null;
this.info = null;
this.useJQuery = false;
options = (options||{});
if (url)
@@ -103,6 +104,9 @@ var SwaggerApi = function(url, options) {
if (options.success != null)
this.success = options.success;
if (typeof options.useJQuery === 'boolean')
this.useJQuery = options.useJQuery;
this.failure = options.failure != null ? options.failure : function() {};
this.progress = options.progress != null ? options.progress : function() {};
if (options.success != null)
@@ -368,20 +372,24 @@ var SwaggerResource = function(resourceObj, api) {
}
}
SwaggerResource.prototype.getAbsoluteBasePath = function(relativeBasePath) {
var parts, pos, url;
SwaggerResource.prototype.getAbsoluteBasePath = function (relativeBasePath) {
var pos, url;
url = this.api.basePath;
pos = url.lastIndexOf(relativeBasePath);
if (pos === -1) {
parts = url.split("/");
url = parts[0] + "//" + parts[2];
var parts = url.split("/");
var rootUrl = parts[0] + "//" + parts[2];
//if the relative path is '/' return the root url
if (relativeBasePath === '/'){
return rootUrl
}
//if the relative path is not in the base path
else if (pos === -1 ) {
if (relativeBasePath.indexOf("/") === 0) {
return url + relativeBasePath;
} else {
return url + "/" + relativeBasePath;
}
} else if (relativeBasePath === "/") {
return url.substring(0, pos);
//If the relative path is in the base path
} else {
return url.substring(0, pos) + relativeBasePath;
}
@@ -478,8 +486,7 @@ SwaggerResource.prototype.addOperations = function(resource_path, ops, consumes,
SwaggerResource.prototype.sanitize = function(nickname) {
var op;
op = nickname.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|./?,\\'""-]/g, '_');
//'
op = nickname.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|.\/?,\\'""-]/g, '_');
op = op.replace(/((_){2,})/g, '_');
op = op.replace(/^(_)*/g, '');
op = op.replace(/([_])*$/g, '');
@@ -812,7 +819,7 @@ SwaggerOperation.prototype.getSampleJSON = function(type, models) {
else
return JSON.stringify(val, null, 2);
}
else
else
return val;
}
};
@@ -904,6 +911,7 @@ SwaggerOperation.prototype.pathXml = function() {
SwaggerOperation.prototype.encodePathParam = function(pathParam) {
var encParts, part, parts, _i, _len;
pathParam = pathParam.toString();
if (pathParam.indexOf("/") === -1) {
return encodeURIComponent(pathParam);
} else {
@@ -1072,7 +1080,7 @@ SwaggerOperation.prototype.formatXml = function(xml) {
var SwaggerRequest = function(type, url, params, opts, successCallback, errorCallback, operation, execution) {
var _this = this;
var errors = [];
this.useJQuery = (typeof operation.useJQuery !== 'undefined' ? operation.useJQuery : null);
this.useJQuery = (typeof operation.resource.useJQuery !== 'undefined' ? operation.resource.useJQuery : null);
this.type = (type||errors.push("SwaggerRequest type is required (get/post/put/delete/patch/options)."));
this.url = (url||errors.push("SwaggerRequest url is required."));
this.params = params;
@@ -1120,6 +1128,8 @@ var SwaggerRequest = function(type, url, params, opts, successCallback, errorCal
else
requestContentType = "application/x-www-form-urlencoded";
}
else if (this.type == "DELETE")
body = "{}";
else if (this.type != "DELETE")
requestContentType = null;
}
@@ -1258,9 +1268,16 @@ SwaggerHttp.prototype.isIE8 = function() {
};
/*
* JQueryHttpClient lets a browser take advantage of JQuery's cross-browser magic
* JQueryHttpClient lets a browser take advantage of JQuery's cross-browser magic.
* NOTE: when jQuery is available it will export both '$' and 'jQuery' to the global space.
* Since we are using closures here we need to alias it for internal use.
*/
var JQueryHttpClient = function(options) {}
var JQueryHttpClient = function(options) {
"use strict";
if(!jQuery){
var jQuery = window.jQuery;
}
}
JQueryHttpClient.prototype.execute = function(obj) {
var cb = obj.on;
@@ -1289,14 +1306,25 @@ JQueryHttpClient.prototype.execute = function(obj) {
obj.data = obj.body;
obj.complete = function(response, textStatus, opts) {
headers = {};
headerArray = response.getAllResponseHeaders().split(":");
var headers = {},
headerArray = response.getAllResponseHeaders().split("\n");
for(var i = 0; i < headerArray.length / 2; i++)
headers[headerArray[i] = headerArray[i+1]];
for(var i = 0; i < headerArray.length; i++) {
var toSplit = headerArray[i].trim();
if(toSplit.length === 0)
continue;
var separator = toSplit.indexOf(":");
if(separator === -1) {
// Name but no value in the header
headers[toSplit] = null;
continue;
}
var name = toSplit.substring(0, separator).trim(),
value = toSplit.substring(separator + 1).trim();
headers[name] = value;
}
out = {
headers: headers,
var out = {
url: request.url,
method: request.method,
status: response.status,
@@ -1323,8 +1351,8 @@ JQueryHttpClient.prototype.execute = function(obj) {
return cb.response(out);
};
$.support.cors = true;
return $.ajax(obj);
jQuery.support.cors = true;
return jQuery.ajax(obj);
}
/*
@@ -1440,16 +1468,31 @@ SwaggerAuthorizations.prototype.remove = function(name) {
};
SwaggerAuthorizations.prototype.apply = function(obj, authorizations) {
status = null;
var status = null;
var key;
for (key in this.authz) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === false)
status = false;
if (result === true)
status = true;
// if the "authorizations" key is undefined, or has an empty array, add all keys
if(typeof authorizations === 'undefined' || Object.keys(authorizations).length == 0) {
for (key in this.authz) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === true)
status = true;
}
}
else {
for(name in authorizations) {
for (key in this.authz) {
if(key == name) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === true)
status = true;
}
}
}
}
return status;
};
@@ -1524,4 +1567,3 @@ e.SwaggerModel = SwaggerModel;
e.SwaggerModelProperty = SwaggerModelProperty;
e.SwaggerResource = SwaggerResource;
e.SwaggerApi = SwaggerApi;
+11 -5
View File
@@ -1,5 +1,5 @@
// swagger-ui.js
// version 2.0.16
// version 2.0.18
$(function() {
// Helper function for vertically aligning DOM elements
@@ -1732,9 +1732,8 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
};
OperationView.prototype.handleFileUpload = function(map, form) {
var bodyParam, el, headerParams, o, obj, param, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref5, _ref6, _ref7, _ref8,
var bodyParam, el, headerParams, o, obj, param, params, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref5, _ref6, _ref7, _ref8,
_this = this;
log("it's a file upload");
_ref5 = form.serializeArray();
for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
o = _ref5[_i];
@@ -1743,6 +1742,7 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
}
}
bodyParam = new FormData();
params = 0;
_ref6 = this.model.parameters;
for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
param = _ref6[_j];
@@ -1764,7 +1764,10 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
_ref8 = form.find('input[type~="file"]');
for (_l = 0, _len3 = _ref8.length; _l < _len3; _l++) {
el = _ref8[_l];
bodyParam.append($(el).attr('name'), el.files[0]);
if (typeof el.files[0] !== 'undefined') {
bodyParam.append($(el).attr('name'), el.files[0]);
params += 1;
}
}
log(bodyParam);
this.invocationUrl = this.model.supportHeaderParams() ? (headerParams = this.model.getHeaderParams(map), this.model.urlify(map, false)) : this.model.urlify(map, true);
@@ -1790,6 +1793,9 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
if (window.authorizations) {
window.authorizations.apply(obj);
}
if (params === 0) {
obj.data.append("fake", "true");
}
jQuery.ajax(obj);
return false;
};
@@ -2133,7 +2139,7 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
var template;
template = this.template();
$(this.el).html(template(this.model));
this.switchToDescription();
this.switchToSnippet();
this.isParam = this.model.isParam;
if (this.isParam) {
$('.notice', $(this.el)).text('Click to set as parameter value');
+1 -1
View File
File diff suppressed because one or more lines are too long
+54 -47
View File
@@ -48,65 +48,72 @@ function handleLogin() {
str += '</label></li>';
popup.append(str);
}
}
var $win = $(window),
dw = $win.width(),
dh = $win.height(),
st = $win.scrollTop(),
dlgWd = popupDialog.outerWidth(),
dlgHt = popupDialog.outerHeight(),
top = (dh -dlgHt)/2 + st,
left = (dw - dlgWd)/2;
var $win = $(window),
dw = $win.width(),
dh = $win.height(),
st = $win.scrollTop(),
dlgWd = popupDialog.outerWidth(),
dlgHt = popupDialog.outerHeight(),
top = (dh -dlgHt)/2 + st,
left = (dw - dlgWd)/2;
popupDialog.css({
top: (top < 0? 0 : top) + 'px',
left: (left < 0? 0 : left) + 'px'
});
popupDialog.css({
top: (top < 0? 0 : top) + 'px',
left: (left < 0? 0 : left) + 'px'
});
popupDialog.find('button.api-popup-cancel').click(function() {
popupMask.hide();
popupDialog.hide();
});
popupDialog.find('button.api-popup-authbtn').click(function() {
popupMask.hide();
popupDialog.hide();
popupDialog.find('button.api-popup-cancel').click(function() {
popupMask.hide();
popupDialog.hide();
});
popupDialog.find('button.api-popup-authbtn').click(function() {
popupMask.hide();
popupDialog.hide();
var authSchemes = window.swaggerUi.api.authSchemes;
var host = window.location;
var redirectUrl = host.protocol + '//' + host.host + "/o2c.html";
var url = null;
var authSchemes = window.swaggerUi.api.authSchemes;
var location = window.location;
var locationUrl = location.protocol + '//' + location.host + location.pathname;
var redirectUrl = locationUrl.replace("index.html","").concat("/o2c.html").replace("//o2c.html","/o2c.html");
var url = null;
var p = window.swaggerUi.api.authSchemes;
for (var key in p) {
if (p.hasOwnProperty(key)) {
var o = p[key].grantTypes;
for(var t in o) {
if(o.hasOwnProperty(t) && t === 'implicit') {
var dets = o[t];
url = dets.loginEndpoint.url + "?response_type=token";
window.swaggerUi.tokenName = dets.tokenName;
var p = window.swaggerUi.api.authSchemes;
for (var key in p) {
if (p.hasOwnProperty(key)) {
var o = p[key].grantTypes;
for(var t in o) {
if(o.hasOwnProperty(t) && t === 'implicit') {
var dets = o[t];
url = dets.loginEndpoint.url + "?response_type=token";
window.swaggerUi.tokenName = dets.tokenName;
}
}
}
}
}
var scopes = []
var o = $('.api-popup-scopes').find('input:checked');
var scopes = [];
var scopeForUrl='';
var o = $('.api-popup-scopes').find('input:checked');
for(k =0; k < o.length; k++) {
scopes.push($(o[k]).attr("scope"));
}
for(var k =0; k < o.length; k++) {
scopes.push($(o[k]).attr("scope"));
if(k > 0){
scopeForUrl+=' ';
}
scopeForUrl+=$(o[k]).attr("scope");
}
window.enabledScopes=scopes;
window.enabledScopes=scopes;
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
url += '&realm=' + encodeURIComponent(realm);
url += '&client_id=' + encodeURIComponent(clientId);
url += '&scope=' + encodeURIComponent(scopes);
window.open(url);
});
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
url += '&realm=' + encodeURIComponent(realm);
url += '&client_id=' + encodeURIComponent(clientId);
url += '&scope=' + encodeURIComponent(scopeForUrl);
window.open(url);
});
}
popupMask.show();
popupDialog.show();
return;
+78 -36
View File
@@ -1,5 +1,5 @@
// swagger.js
// version 2.0.30
// version 2.0.31
var __bind = function(fn, me){
return function(){
@@ -57,24 +57,24 @@ Object.keys = Object.keys || (function () {
'constructor'
],
DontEnumsLength = DontEnums.length;
return function (o) {
if (typeof o != "object" && typeof o != "function" || o === null)
throw new TypeError("Object.keys called on a non-object");
var result = [];
for (var name in o) {
if (hasOwnProperty.call(o, name))
result.push(name);
}
if (hasDontEnumBug) {
for (var i = 0; i < DontEnumsLength; i++) {
if (hasOwnProperty.call(o, DontEnums[i]))
result.push(DontEnums[i]);
}
}
}
return result;
};
})();
@@ -87,6 +87,7 @@ var SwaggerApi = function(url, options) {
this.authorizations = null;
this.authorizationScheme = null;
this.info = null;
this.useJQuery = false;
options = (options||{});
if (url)
@@ -103,6 +104,9 @@ var SwaggerApi = function(url, options) {
if (options.success != null)
this.success = options.success;
if (typeof options.useJQuery === 'boolean')
this.useJQuery = options.useJQuery;
this.failure = options.failure != null ? options.failure : function() {};
this.progress = options.progress != null ? options.progress : function() {};
if (options.success != null)
@@ -368,20 +372,24 @@ var SwaggerResource = function(resourceObj, api) {
}
}
SwaggerResource.prototype.getAbsoluteBasePath = function(relativeBasePath) {
var parts, pos, url;
SwaggerResource.prototype.getAbsoluteBasePath = function (relativeBasePath) {
var pos, url;
url = this.api.basePath;
pos = url.lastIndexOf(relativeBasePath);
if (pos === -1) {
parts = url.split("/");
url = parts[0] + "//" + parts[2];
var parts = url.split("/");
var rootUrl = parts[0] + "//" + parts[2];
//if the relative path is '/' return the root url
if (relativeBasePath === '/'){
return rootUrl
}
//if the relative path is not in the base path
else if (pos === -1 ) {
if (relativeBasePath.indexOf("/") === 0) {
return url + relativeBasePath;
} else {
return url + "/" + relativeBasePath;
}
} else if (relativeBasePath === "/") {
return url.substring(0, pos);
//If the relative path is in the base path
} else {
return url.substring(0, pos) + relativeBasePath;
}
@@ -478,8 +486,7 @@ SwaggerResource.prototype.addOperations = function(resource_path, ops, consumes,
SwaggerResource.prototype.sanitize = function(nickname) {
var op;
op = nickname.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|./?,\\'""-]/g, '_');
//'
op = nickname.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|.\/?,\\'""-]/g, '_');
op = op.replace(/((_){2,})/g, '_');
op = op.replace(/^(_)*/g, '');
op = op.replace(/([_])*$/g, '');
@@ -812,7 +819,7 @@ SwaggerOperation.prototype.getSampleJSON = function(type, models) {
else
return JSON.stringify(val, null, 2);
}
else
else
return val;
}
};
@@ -904,6 +911,7 @@ SwaggerOperation.prototype.pathXml = function() {
SwaggerOperation.prototype.encodePathParam = function(pathParam) {
var encParts, part, parts, _i, _len;
pathParam = pathParam.toString();
if (pathParam.indexOf("/") === -1) {
return encodeURIComponent(pathParam);
} else {
@@ -1072,7 +1080,7 @@ SwaggerOperation.prototype.formatXml = function(xml) {
var SwaggerRequest = function(type, url, params, opts, successCallback, errorCallback, operation, execution) {
var _this = this;
var errors = [];
this.useJQuery = (typeof operation.useJQuery !== 'undefined' ? operation.useJQuery : null);
this.useJQuery = (typeof operation.resource.useJQuery !== 'undefined' ? operation.resource.useJQuery : null);
this.type = (type||errors.push("SwaggerRequest type is required (get/post/put/delete/patch/options)."));
this.url = (url||errors.push("SwaggerRequest url is required."));
this.params = params;
@@ -1120,6 +1128,8 @@ var SwaggerRequest = function(type, url, params, opts, successCallback, errorCal
else
requestContentType = "application/x-www-form-urlencoded";
}
else if (this.type == "DELETE")
body = "{}";
else if (this.type != "DELETE")
requestContentType = null;
}
@@ -1258,9 +1268,16 @@ SwaggerHttp.prototype.isIE8 = function() {
};
/*
* JQueryHttpClient lets a browser take advantage of JQuery's cross-browser magic
* JQueryHttpClient lets a browser take advantage of JQuery's cross-browser magic.
* NOTE: when jQuery is available it will export both '$' and 'jQuery' to the global space.
* Since we are using closures here we need to alias it for internal use.
*/
var JQueryHttpClient = function(options) {}
var JQueryHttpClient = function(options) {
"use strict";
if(!jQuery){
var jQuery = window.jQuery;
}
}
JQueryHttpClient.prototype.execute = function(obj) {
var cb = obj.on;
@@ -1289,14 +1306,25 @@ JQueryHttpClient.prototype.execute = function(obj) {
obj.data = obj.body;
obj.complete = function(response, textStatus, opts) {
headers = {};
headerArray = response.getAllResponseHeaders().split(":");
var headers = {},
headerArray = response.getAllResponseHeaders().split("\n");
for(var i = 0; i < headerArray.length / 2; i++)
headers[headerArray[i] = headerArray[i+1]];
for(var i = 0; i < headerArray.length; i++) {
var toSplit = headerArray[i].trim();
if(toSplit.length === 0)
continue;
var separator = toSplit.indexOf(":");
if(separator === -1) {
// Name but no value in the header
headers[toSplit] = null;
continue;
}
var name = toSplit.substring(0, separator).trim(),
value = toSplit.substring(separator + 1).trim();
headers[name] = value;
}
out = {
headers: headers,
var out = {
url: request.url,
method: request.method,
status: response.status,
@@ -1323,8 +1351,8 @@ JQueryHttpClient.prototype.execute = function(obj) {
return cb.response(out);
};
$.support.cors = true;
return $.ajax(obj);
jQuery.support.cors = true;
return jQuery.ajax(obj);
}
/*
@@ -1440,16 +1468,31 @@ SwaggerAuthorizations.prototype.remove = function(name) {
};
SwaggerAuthorizations.prototype.apply = function(obj, authorizations) {
status = null;
var status = null;
var key;
for (key in this.authz) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === false)
status = false;
if (result === true)
status = true;
// if the "authorizations" key is undefined, or has an empty array, add all keys
if(typeof authorizations === 'undefined' || Object.keys(authorizations).length == 0) {
for (key in this.authz) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === true)
status = true;
}
}
else {
for(name in authorizations) {
for (key in this.authz) {
if(key == name) {
value = this.authz[key];
result = value.apply(obj, authorizations);
if (result === true)
status = true;
}
}
}
}
return status;
};
@@ -1524,4 +1567,3 @@ e.SwaggerModel = SwaggerModel;
e.SwaggerModelProperty = SwaggerModelProperty;
e.SwaggerResource = SwaggerResource;
e.SwaggerApi = SwaggerApi;
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "swagger-ui",
"version": "2.0.16",
"version": "2.0.18",
"description": "Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API",
"scripts": {
"build": "PATH=$PATH:./node_modules/.bin cake dist",
@@ -151,13 +151,13 @@ class OperationView extends Backbone.View
parent.showCompleteStatus response
handleFileUpload: (map, form) ->
log "it's a file upload"
for o in form.serializeArray()
if(o.value? && jQuery.trim(o.value).length > 0)
map[o.name] = o.value
# requires HTML5 compatible browser
bodyParam = new FormData()
params = 0
# add params
for param in @model.parameters
@@ -175,7 +175,9 @@ class OperationView extends Backbone.View
# add files
for el in form.find('input[type~="file"]')
bodyParam.append($(el).attr('name'), el.files[0])
if typeof el.files[0] isnt 'undefined'
bodyParam.append($(el).attr('name'), el.files[0])
params += 1
log(bodyParam)
@@ -207,6 +209,9 @@ class OperationView extends Backbone.View
if window.authorizations
window.authorizations.apply obj
if params is 0
obj.data.append("fake", "true");
jQuery.ajax(obj)
false
# end of file-upload nastiness
@@ -11,7 +11,7 @@ class SignatureView extends Backbone.View
template = @template()
$(@el).html(template(@model))
@switchToDescription()
@switchToSnippet()
@isParam = @model.isParam
+3 -1
View File
@@ -2,9 +2,11 @@
<html>
<head>
<title>Swagger UI</title>
<link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
<link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>
<script type="text/javascript" src="lib/shred.bundle.js"></script>
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>