diff --git a/source/index.html.haml b/source/index.html.haml index bc50a1df..c7fe263d 100644 --- a/source/index.html.haml +++ b/source/index.html.haml @@ -71,6 +71,29 @@ %h4 Response Headers .block.response_headers += jquery_template :paramTemplate do + %tr + %td.code ${name} + %td + %input{:minlength => "0", :name => "${name}", :placeholder => "", :type => "text", :value => ""} + %td{:width => "500"} ${description} + + += jquery_template :paramTemplateSelect do + %tr + %td.code ${name} + %td + %select{:name => "${name}"} + {{each allowableValues}} + {{if $value == defaultValue }} + %option{:value => "${$value}", :selected => 'selected'} ${$value} + {{else}} + %option{:value => "${$value}"} ${$value} + {{/if}} + {{/each}} + + %td{:width => "500"} ${description} + = jquery_template :paramTemplateRequired do %tr %td.code.required ${name} @@ -79,13 +102,6 @@ %td{:width => "500"} %strong ${description} -= jquery_template :paramTemplate do - %tr - %td.code ${name} - %td - %input{:minlength => "0", :name => "${name}", :placeholder => "", :type => "text", :value => ""} - %td{:width => "500"} ${description} - = jquery_template :paramTemplateRequiredReadOnly do %tr %td.code.required ${name} diff --git a/source/javascripts/app.js b/source/javascripts/app.js index beafec11..6d9f93c1 100644 --- a/source/javascripts/app.js +++ b/source/javascripts/app.js @@ -6,4 +6,5 @@ //= require "jquery.wiggle.min" //= require "chosen.jquery" //= require "doc" -//= require "spine" +//= require "underscore-min" +//= require "spine" \ No newline at end of file diff --git a/source/javascripts/swagger-ui.js b/source/javascripts/swagger-ui.js index 82b94cbc..2ecc5a7c 100644 --- a/source/javascripts/swagger-ui.js +++ b/source/javascripts/swagger-ui.js @@ -215,6 +215,36 @@ jQuery(function($) { } }); + + // Param Model + // ---------------------------------------------------------------------------------------------- + var Param = Spine.Model.setup( + "Param", + ["name", "defaultValue", 'description', 'required', 'dataType', 'allowableValues', 'paramType', 'allowMultiple', "readOnly"] + ); + + Param.include({ + + cleanup: function() { + this.defaultValue = this.defaultValue || ''; + }, + + templateName: function(){ + var n = "#paramTemplate"; + + if (this.allowableValues && this.allowableValues.length > 0) { + n += "Select"; + } else { + if (this.required) n += "Required"; + if (this.readOnly) n += "ReadOnly"; + } + + return(n); + } + + }); + + var OperationController = Spine.Controller.create({ proxied: ["submitOperation", "showResponse", "showErrorStatus", "showCompleteStatus"], @@ -230,7 +260,6 @@ jQuery(function($) { this.elementScope = "#" + this.operation.apiName + "_" + this.operation.nickname + "_" + this.operation.httpMethod; this.renderParams(); - }, render: function() { @@ -240,19 +269,14 @@ jQuery(function($) { renderParams: function() { if (this.operation.parameters && this.operation.parameters.count() > 0) { var operationParamsContainer = this.elementScope + "_params"; - // log("operationParamsContainer = " + operationParamsContainer); + for (var p = 0; p < this.operation.parameters.count(); p++) { - var param = this.operation.parameters.all()[p]; - - var templateName = "#paramTemplate"; - if (param.required) - templateName += "Required"; - - if (!this.isGetOperation) - templateName += "ReadOnly"; - - $(templateName).tmpl(param).appendTo(operationParamsContainer); - // log("adding " + $(templateName).tmpl(param) + " TO " + operationParamsContainer); + var param = Param.init(this.operation.parameters.all()[p]); + // Only GET operations display forms.. + param.readOnly = !this.isGetOperation; + param.cleanup(); + + $(param.templateName()).tmpl(param).appendTo(operationParamsContainer); } } @@ -273,7 +297,7 @@ jQuery(function($) { var error_free = true; var missing_input = null; - // Cycle through the forms required inputs + // Cycle through the form's required inputs form.find("input.required").each(function() { // Remove any existing error styles from the input @@ -289,9 +313,7 @@ jQuery(function($) { } }); - - // log("error_free = " + error_free); - + if (error_free) { var invocationUrl = this.operation.invocationUrl(form.serializeArray()); $(".request_url", this.elementScope + "_content_sandbox_response").html("
" + invocationUrl + "
"); diff --git a/source/javascripts/underscore-min.js b/source/javascripts/underscore-min.js new file mode 100644 index 00000000..5983694c --- /dev/null +++ b/source/javascripts/underscore-min.js @@ -0,0 +1,27 @@ +// Underscore.js 1.1.7 +// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore is freely distributable under the MIT license. +// Portions of Underscore are inspired or borrowed from Prototype, +// Oliver Steele's Functional, and John Resig's Micro-Templating. +// For all details and documentation: +// http://documentcloud.github.com/underscore +(function(){var p=this,C=p._,m={},i=Array.prototype,n=Object.prototype,f=i.slice,D=i.unshift,E=n.toString,l=n.hasOwnProperty,s=i.forEach,t=i.map,u=i.reduce,v=i.reduceRight,w=i.filter,x=i.every,y=i.some,o=i.indexOf,z=i.lastIndexOf;n=Array.isArray;var F=Object.keys,q=Function.prototype.bind,b=function(a){return new j(a)};typeof module!=="undefined"&&module.exports?(module.exports=b,b._=b):p._=b;b.VERSION="1.1.7";var h=b.each=b.forEach=function(a,c,b){if(a!=null)if(s&&a.forEach===s)a.forEach(c,b);else if(a.length=== ++a.length)for(var e=0,k=a.length;e=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a, +c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):a;bd?1:0}),"value")};b.groupBy=function(a,b){var d={};h(a,function(a,f){var g=b(a,f);(d[g]||(d[g]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d|| +(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=f.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after= +function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}};b.keys=F||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)l.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){h(f.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){h(f.call(arguments, +1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,c){if(a===c)return!0;var d=typeof a;if(d!=typeof c)return!1;if(a==c)return!0;if(!a&&c||a&&!c)return!1;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual)return a.isEqual(c);if(c.isEqual)return c.isEqual(a);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return!1; +if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return!1;if(a.length&&a.length!==c.length)return!1;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return!1;for(var f in a)if(!(f in c)||!b.isEqual(a[f],c[f]))return!1;return!0};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(l.call(a,c))return!1;return!0};b.isElement=function(a){return!!(a&&a.nodeType== +1)};b.isArray=n||function(a){return E.call(a)==="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return!(!a||!l.call(a,"callee"))};b.isFunction=function(a){return!(!a||!a.constructor||!a.call||!a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===!0||a===!1};b.isDate=function(a){return!(!a||!a.getTimezoneOffset|| +!a.setUTCFullYear)};b.isRegExp=function(a){return!(!a||!a.test||!a.exec||!(a.ignoreCase||a.ignoreCase===!1))};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){p._=C;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,interpolate:/<%=([\s\S]+?)%>/g}; +b.template=function(a,c){var d=b.templateSettings;d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');";d=new Function("obj",d);return c?d(c):d}; +var j=function(a){this._wrapped=a};b.prototype=j.prototype;var r=function(a,c){return c?b(a).chain():a},H=function(a,c){j.prototype[a]=function(){var a=f.call(arguments);D.call(a,this._wrapped);return r(c.apply(b,a),this._chain)}};b.mixin(b);h(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=i[a];j.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});h(["concat","join","slice"],function(a){var b=i[a];j.prototype[a]=function(){return r(b.apply(this._wrapped, +arguments),this._chain)}});j.prototype.chain=function(){this._chain=!0;return this};j.prototype.value=function(){return this._wrapped}})();