Skip to content

Commit 34bd474

Browse files
committed
fix for #288
1 parent 4601f62 commit 34bd474

File tree

4 files changed

+177
-13
lines changed

4 files changed

+177
-13
lines changed

dist/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
66
<link href='css/highlight.default.css' media='screen' rel='stylesheet' type='text/css'/>
77
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
8-
<script type="text/javascript" src="lib/shred.bundle.js"></script>
8+
<script type="text/javascript" src="lib/shred.bundle.js" /></script>
99
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
1010
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
1111
<script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>

dist/swagger-ui.js

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,6 +1470,8 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
14701470
return _ref4;
14711471
}
14721472

1473+
OperationView.prototype.invocationUrl = null;
1474+
14731475
OperationView.prototype.events = {
14741476
'submit .sandbox': 'submitOperation',
14751477
'click .submit': 'submitOperation',
@@ -1554,7 +1556,7 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
15541556
};
15551557

15561558
OperationView.prototype.submitOperation = function(e) {
1557-
var error_free, form, map, o, opts, val, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7;
1559+
var error_free, form, isFileUpload, map, o, opts, val, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7;
15581560
if (e != null) {
15591561
e.preventDefault();
15601562
}
@@ -1578,12 +1580,16 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
15781580
opts = {
15791581
parent: this
15801582
};
1583+
isFileUpload = false;
15811584
_ref5 = form.find("input");
15821585
for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
15831586
o = _ref5[_i];
15841587
if ((o.value != null) && jQuery.trim(o.value).length > 0) {
15851588
map[o.name] = o.value;
15861589
}
1590+
if (o.type === "file") {
1591+
isFileUpload = true;
1592+
}
15871593
}
15881594
_ref6 = form.find("textarea");
15891595
for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
@@ -1603,14 +1609,94 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
16031609
opts.responseContentType = $("div select[name=responseContentType]", $(this.el)).val();
16041610
opts.requestContentType = $("div select[name=parameterContentType]", $(this.el)).val();
16051611
$(".response_throbber", $(this.el)).show();
1606-
return this.model["do"](map, opts, this.showCompleteStatus, this.showErrorStatus, this);
1612+
if (isFileUpload) {
1613+
return this.handleFileUpload(map, form);
1614+
} else {
1615+
return this.model["do"](map, opts, this.showCompleteStatus, this.showErrorStatus, this);
1616+
}
16071617
}
16081618
};
16091619

16101620
OperationView.prototype.success = function(response, parent) {
16111621
return parent.showCompleteStatus(response);
16121622
};
16131623

1624+
OperationView.prototype.handleFileUpload = function(map, form) {
1625+
var bodyParam, headerParams, o, obj, param, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7,
1626+
_this = this;
1627+
console.log("it's a file upload");
1628+
_ref5 = form.serializeArray();
1629+
for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
1630+
o = _ref5[_i];
1631+
if ((o.value != null) && jQuery.trim(o.value).length > 0) {
1632+
map[o.name] = o.value;
1633+
}
1634+
}
1635+
bodyParam = new FormData();
1636+
_ref6 = this.model.parameters;
1637+
for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
1638+
param = _ref6[_j];
1639+
if (param.paramType === 'form') {
1640+
bodyParam.append(param.name, map[param.name]);
1641+
}
1642+
}
1643+
headerParams = {};
1644+
_ref7 = this.model.parameters;
1645+
for (_k = 0, _len2 = _ref7.length; _k < _len2; _k++) {
1646+
param = _ref7[_k];
1647+
if (param.paramType === 'header') {
1648+
headerParams[param.name] = map[param.name];
1649+
}
1650+
}
1651+
console.log(headerParams);
1652+
$.each($('input[type~="file"]'), function(i, el) {
1653+
return bodyParam.append($(el).attr('name'), el.files[0]);
1654+
});
1655+
console.log(bodyParam);
1656+
this.invocationUrl = this.model.supportHeaderParams() ? (headerParams = this.model.getHeaderParams(map), this.model.urlify(map, false)) : this.model.urlify(map, true);
1657+
$(".request_url", $(this.el)).html("<pre>" + this.invocationUrl + "</pre>");
1658+
obj = {
1659+
type: this.model.method,
1660+
url: this.invocationUrl,
1661+
headers: headerParams,
1662+
data: bodyParam,
1663+
dataType: 'json',
1664+
contentType: false,
1665+
processData: false,
1666+
error: function(data, textStatus, error) {
1667+
return _this.showErrorStatus(_this.wrap(data), _this);
1668+
},
1669+
success: function(data) {
1670+
return _this.showResponse(data, _this);
1671+
},
1672+
complete: function(data) {
1673+
return _this.showCompleteStatus(_this.wrap(data), _this);
1674+
}
1675+
};
1676+
if (window.authorizations) {
1677+
window.authorizations.apply(obj);
1678+
}
1679+
jQuery.ajax(obj);
1680+
return false;
1681+
};
1682+
1683+
OperationView.prototype.wrap = function(data) {
1684+
var o,
1685+
_this = this;
1686+
o = {};
1687+
o.content = {};
1688+
o.content.data = data.responseText;
1689+
o.getHeaders = function() {
1690+
return {
1691+
"Content-Type": data.getResponseHeader("Content-Type")
1692+
};
1693+
};
1694+
o.request = {};
1695+
o.request.url = this.invocationUrl;
1696+
o.status = data.status;
1697+
return o;
1698+
};
1699+
16141700
OperationView.prototype.getSelectedValue = function(select) {
16151701
var opt, options, _i, _len, _ref5;
16161702
if (!select.multiple) {
@@ -1744,15 +1830,17 @@ helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
17441830
} else if (contentType.indexOf("text/html") === 0) {
17451831
code = $('<code />').html(content);
17461832
pre = $('<pre class="xml" />').append(code);
1833+
} else if (contentType.indexOf("image/") === 0) {
1834+
pre = $('<img>').attr('src', data.request.url);
17471835
} else {
17481836
code = $('<code />').text(content);
17491837
pre = $('<pre class="json" />').append(code);
17501838
}
17511839
response_body = pre;
1752-
$(".request_url").html("<pre>" + data.request.url + "</pre>");
1840+
$(".request_url", $(this.el)).html("<pre>" + data.request.url + "</pre>");
17531841
$(".response_code", $(this.el)).html("<pre>" + data.status + "</pre>");
17541842
$(".response_body", $(this.el)).html(response_body);
1755-
$(".response_headers", $(this.el)).html("<pre>" + JSON.stringify(data.getHeaders()) + "</pre>");
1843+
$(".response_headers", $(this.el)).html("<pre>" + JSON.stringify(data.getHeaders(), null, " ").replace(/\n/g, "<br>") + "</pre>");
17561844
$(".response", $(this.el)).slideDown();
17571845
$(".response_hider", $(this.el)).show();
17581846
$(".response_throbber", $(this.el)).hide();

dist/swagger-ui.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/coffeescript/view/OperationView.coffee

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class OperationView extends Backbone.View
2+
invocationUrl: null
3+
24
events: {
35
'submit .sandbox' : 'submitOperation'
46
'click .submit' : 'submitOperation'
@@ -77,13 +79,14 @@ class OperationView extends Backbone.View
7779
if error_free
7880
map = {}
7981
opts = {parent: @}
80-
#for o in form.serializeArray()
81-
#if(o.value? && jQuery.trim(o.value).length > 0)
82-
#map[o.name] = o.value
82+
83+
isFileUpload = false
8384

8485
for o in form.find("input")
8586
if(o.value? && jQuery.trim(o.value).length > 0)
8687
map[o.name] = o.value
88+
if o.type is "file"
89+
isFileUpload = true
8790

8891
for o in form.find("textarea")
8992
if(o.value? && jQuery.trim(o.value).length > 0)
@@ -98,12 +101,85 @@ class OperationView extends Backbone.View
98101
opts.requestContentType = $("div select[name=parameterContentType]", $(@el)).val()
99102

100103
$(".response_throbber", $(@el)).show()
101-
102-
@model.do(map, opts, @showCompleteStatus, @showErrorStatus, @)
104+
if isFileUpload
105+
@handleFileUpload map, form
106+
else
107+
@model.do(map, opts, @showCompleteStatus, @showErrorStatus, @)
103108

104109
success: (response, parent) ->
105110
parent.showCompleteStatus response
106-
111+
112+
handleFileUpload: (map, form) ->
113+
console.log "it's a file upload"
114+
for o in form.serializeArray()
115+
if(o.value? && jQuery.trim(o.value).length > 0)
116+
map[o.name] = o.value
117+
118+
# requires HTML5 compatible browser
119+
bodyParam = new FormData()
120+
121+
# add params
122+
for param in @model.parameters
123+
if param.paramType is 'form'
124+
bodyParam.append(param.name, map[param.name])
125+
126+
# headers in operation
127+
headerParams = {}
128+
for param in @model.parameters
129+
if param.paramType is 'header'
130+
headerParams[param.name] = map[param.name]
131+
132+
console.log headerParams
133+
134+
# add files
135+
$.each $('input[type~="file"]'), (i, el) ->
136+
bodyParam.append($(el).attr('name'), el.files[0])
137+
138+
console.log(bodyParam)
139+
140+
@invocationUrl =
141+
if @model.supportHeaderParams()
142+
headerParams = @model.getHeaderParams(map)
143+
@model.urlify(map, false)
144+
else
145+
@model.urlify(map, true)
146+
147+
$(".request_url", $(@el)).html "<pre>" + @invocationUrl + "</pre>"
148+
149+
obj =
150+
type: @model.method
151+
url: @invocationUrl
152+
headers: headerParams
153+
data: bodyParam
154+
dataType: 'json'
155+
contentType: false
156+
processData: false
157+
error: (data, textStatus, error) =>
158+
@showErrorStatus(@wrap(data), @)
159+
success: (data) =>
160+
@showResponse(data, @)
161+
complete: (data) =>
162+
@showCompleteStatus(@wrap(data), @)
163+
164+
# apply authorizations
165+
if window.authorizations
166+
window.authorizations.apply obj
167+
168+
jQuery.ajax(obj)
169+
false
170+
# end of file-upload nastiness
171+
172+
# wraps a jquery response as a shred response
173+
wrap: (data) ->
174+
o = {}
175+
o.content = {}
176+
o.content.data = data.responseText
177+
o.getHeaders = () => {"Content-Type": data.getResponseHeader("Content-Type")}
178+
o.request = {}
179+
o.request.url = @invocationUrl
180+
o.status = data.status
181+
o
182+
107183
getSelectedValue: (select) ->
108184
if !select.multiple
109185
select.value
@@ -225,7 +301,7 @@ class OperationView extends Backbone.View
225301
$(".request_url", $(@el)).html "<pre>" + data.request.url + "</pre>"
226302
$(".response_code", $(@el)).html "<pre>" + data.status + "</pre>"
227303
$(".response_body", $(@el)).html response_body
228-
$(".response_headers", $(@el)).html "<pre>" + JSON.stringify(data.getHeaders()) + "</pre>"
304+
$(".response_headers", $(@el)).html "<pre>" + JSON.stringify(data.getHeaders(), null, " ").replace(/\n/g, "<br>") + "</pre>"
229305
$(".response", $(@el)).slideDown()
230306
$(".response_hider", $(@el)).show()
231307
$(".response_throbber", $(@el)).hide()

0 commit comments

Comments
 (0)