Skip to content

Commit af39ae0

Browse files
committed
Multiple values for array type parameters as separated lines in the textarea.
Improved required parameter handling for the array type. Improved default value handling for the array type.
1 parent 1ea7786 commit af39ae0

File tree

6 files changed

+80
-16
lines changed

6 files changed

+80
-16
lines changed

src/main/javascript/helpers/handlebars.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,25 @@ Handlebars.registerHelper('sanitize', function(html) {
44
// Strip the script tags from the html, and return it as a Handlebars.SafeString
55
html = html.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');
66
return new Handlebars.SafeString(html);
7+
});
8+
9+
Handlebars.registerHelper('renderTextParam', function(param) {
10+
var result;
11+
var isArray = param.type.toLowerCase() === 'array' || param.allowMultiple;
12+
var defaultValue = isArray && Array.isArray(param.default) ? param.default.join('\n') : param.default;
13+
14+
if (typeof defaultValue === 'undefined') {
15+
defaultValue = '';
16+
}
17+
18+
if(isArray) {
19+
result = "<textarea class='body-textarea" + (param.required ? " required" : "") + "' name='" + param.name + "'"
20+
+ " placeholder='Provide multiple values in new lines" + (param.required ? " (at least one required)." : ".") + "'>"
21+
+ defaultValue + "</textarea>";
22+
} else {
23+
result = "<input class='parameter'" + (param.required ? " class='required'" : "") + " minlength='" + (param.required ? 1 : 0)
24+
+ "' name='" + param.name +"' placeholder='" + (param.required ? "(required)" : "") + "'"
25+
+ " type='text' value='" + defaultValue + "'/>";
26+
}
27+
return new Handlebars.SafeString(result);
728
});

src/main/javascript/view/OperationView.js

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,20 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({
275275
error_free = false;
276276
}
277277
});
278+
form.find('select.required').each(function() {
279+
$(this).removeClass('error');
280+
if (this.selectedIndex === -1) {
281+
$(this).addClass('error');
282+
$(this).wiggle({
283+
callback: (function(_this) {
284+
return function() {
285+
$(_this).focus();
286+
};
287+
})(this)
288+
});
289+
error_free = false;
290+
}
291+
});
278292
if (error_free) {
279293
map = {};
280294
opts = {
@@ -295,8 +309,9 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({
295309
ref2 = form.find('textarea');
296310
for (m = 0, len1 = ref2.length; m < len1; m++) {
297311
o = ref2[m];
298-
if ((o.value !== null) && jQuery.trim(o.value).length > 0) {
299-
map[o.name] = o.value;
312+
val = this.getTextAreaValue(o);
313+
if ((val !== null) && jQuery.trim(val).length > 0) {
314+
map[o.name] = val;
300315
}
301316
}
302317
ref3 = form.find('select');
@@ -661,5 +676,38 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({
661676
} else {
662677
Docs.expandOperation(elem);
663678
}
679+
},
680+
681+
getTextAreaValue: function(textArea) {
682+
var param, parsed, result, i;
683+
if (textArea.value === null || jQuery.trim(textArea.value).length === 0) {
684+
return null;
685+
}
686+
param = this.getParamByName(textArea.name);
687+
if (param && param.type && param.type.toLowerCase() === 'array') {
688+
parsed = textArea.value.split('\n');
689+
result = [];
690+
for (i = 0; i < parsed.length; i++) {
691+
if (parsed[i] !== null && jQuery.trim(parsed[i]).length > 0) {
692+
result.push(parsed[i]);
693+
}
694+
}
695+
return result.length > 0 ? result : null;
696+
} else {
697+
return textArea.value;
698+
}
699+
},
700+
701+
getParamByName: function(name) {
702+
var i;
703+
if (this.model.parameters) {
704+
for(i = 0; i < this.model.parameters.length; i++) {
705+
if (this.model.parameters[i].name === name) {
706+
return this.model.parameters[i];
707+
}
708+
}
709+
}
710+
return null;
664711
}
712+
665713
});

src/main/javascript/view/ParameterView.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({
44
initialize: function(){
55
Handlebars.registerHelper('isArray', function(param, opts) {
66
if (param.type.toLowerCase() === 'array' || param.allowMultiple) {
7-
opts.fn(this);
7+
return opts.fn(this);
88
} else {
9-
opts.inverse(this);
9+
return opts.inverse(this);
1010
}
1111
});
1212
},

src/main/template/param.handlebars

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,8 @@
2121
<input type="file" name='{{name}}'/>
2222
<div class="parameter-content-type" />
2323
{{else}}
24-
{{#if default}}
25-
<input class='parameter' minlength='0' name='{{name}}' placeholder='' type='text' value='{{default}}'/>
26-
{{else}}
27-
<input class='parameter' minlength='0' name='{{name}}' placeholder='' type='text' value=''/>
28-
{{/if}}
24+
{{#renderTextParam this}}
25+
{{/renderTextParam}}
2926
{{/if}}
3027
{{/if}}
3128

src/main/template/param_list.handlebars

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{{#if required}}
22
<td class='code required'>{{name}}</td>
3-
{{/if}}
3+
{{else}}
44
<td class='code'>{{name}}</td>
5+
{{/if}}
56
<td>
6-
<select {{#isArray this}} multiple='multiple'{{/isArray}} class='parameter' name='{{name}}'>
7+
<select {{#isArray this}} multiple='multiple'{{/isArray}} class={{#if required}}'parameter required'{{else}}'parameter'{{/if}} name='{{name}}'>
78
{{#if required}}
89
{{else}}
910
{{#if default}}

src/main/template/param_required.handlebars

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@
1818
{{#if isFile}}
1919
<input class='parameter' class='required' type='file' name='{{name}}'/>
2020
{{else}}
21-
{{#if default}}
22-
<input class='parameter required' minlength='1' name='{{name}}' placeholder='(required)' type='text' value='{{default}}'/>
23-
{{else}}
24-
<input class='parameter required' minlength='1' name='{{name}}' placeholder='(required)' type='text' value=''/>
25-
{{/if}}
21+
{{#renderTextParam this}}
22+
{{/renderTextParam}}
2623
{{/if}}
2724
{{/if}}
2825
</td>

0 commit comments

Comments
 (0)