swagger_ui_generator 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +23 -0
- data/lib/generators/swagger_ui_generator/install/install_generator.rb +22 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/api-docs.html.erb +73 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/highlight.default.css +135 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/screen.css +1070 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/backbone-min.js +38 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/handlebars-1.0.0.js +2278 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/highlight.7.3.pack.js +1 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery-1.8.0.min.js +2 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.ba-bbq.min.js +18 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.slideto.min.js +1 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.wiggle.min.js +8 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred.bundle.js +2765 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred/content.js +193 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/swagger.js +1311 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/underscore-min.js +32 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/swagger-ui.js +2129 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/throbber.gif +0 -0
- data/lib/swagger_ui_generator.rb +5 -0
- data/lib/swagger_ui_generator/importer.rb +97 -0
- data/lib/swagger_ui_generator/version.rb +3 -0
- data/swagger_ui_generator.gemspec +28 -0
- data/test/lib/generators/swagger_ui_generator/install_generator_test.rb +73 -0
- data/test/test_helper.rb +19 -0
- data/vendor/swagger-ui/.gitignore +22 -0
- data/vendor/swagger-ui/.npmignore +7 -0
- data/vendor/swagger-ui/Cakefile +132 -0
- data/vendor/swagger-ui/README.md +110 -0
- data/vendor/swagger-ui/dist/css/highlight.default.css +135 -0
- data/vendor/swagger-ui/dist/css/screen.css +1070 -0
- data/vendor/swagger-ui/dist/images/logo_small.png +0 -0
- data/vendor/swagger-ui/dist/images/pet_store_api.png +0 -0
- data/vendor/swagger-ui/dist/images/throbber.gif +0 -0
- data/vendor/swagger-ui/dist/images/wordnik_api.png +0 -0
- data/vendor/swagger-ui/dist/index.html +78 -0
- data/vendor/swagger-ui/dist/lib/backbone-min.js +38 -0
- data/vendor/swagger-ui/dist/lib/handlebars-1.0.0.js +2278 -0
- data/vendor/swagger-ui/dist/lib/highlight.7.3.pack.js +1 -0
- data/vendor/swagger-ui/dist/lib/jquery-1.8.0.min.js +2 -0
- data/vendor/swagger-ui/dist/lib/jquery.ba-bbq.min.js +18 -0
- data/vendor/swagger-ui/dist/lib/jquery.slideto.min.js +1 -0
- data/vendor/swagger-ui/dist/lib/jquery.wiggle.min.js +8 -0
- data/vendor/swagger-ui/dist/lib/shred.bundle.js +2765 -0
- data/vendor/swagger-ui/dist/lib/shred/content.js +193 -0
- data/vendor/swagger-ui/dist/lib/swagger.js +1311 -0
- data/vendor/swagger-ui/dist/lib/underscore-min.js +32 -0
- data/vendor/swagger-ui/dist/swagger-ui.js +2129 -0
- data/vendor/swagger-ui/dist/swagger-ui.min.js +1 -0
- data/vendor/swagger-ui/lib/backbone-min.js +38 -0
- data/vendor/swagger-ui/lib/handlebars-1.0.0.js +2278 -0
- data/vendor/swagger-ui/lib/highlight.7.3.pack.js +1 -0
- data/vendor/swagger-ui/lib/jquery-1.8.0.min.js +2 -0
- data/vendor/swagger-ui/lib/jquery.ba-bbq.min.js +18 -0
- data/vendor/swagger-ui/lib/jquery.slideto.min.js +1 -0
- data/vendor/swagger-ui/lib/jquery.wiggle.min.js +8 -0
- data/vendor/swagger-ui/lib/shred.bundle.js +2765 -0
- data/vendor/swagger-ui/lib/shred/content.js +193 -0
- data/vendor/swagger-ui/lib/swagger.js +1311 -0
- data/vendor/swagger-ui/lib/underscore-min.js +32 -0
- data/vendor/swagger-ui/package.json +26 -0
- data/vendor/swagger-ui/src/main/coffeescript/SwaggerUi.coffee +101 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/HeaderView.coffee +37 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/MainView.coffee +18 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/OperationView.coffee +318 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ParameterContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ParameterView.coffee +57 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ResourceView.coffee +21 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ResponseContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/SignatureView.coffee +51 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/StatusCodeView.coffee +11 -0
- data/vendor/swagger-ui/src/main/html/css/highlight.default.css +135 -0
- data/vendor/swagger-ui/src/main/html/css/screen.css +1070 -0
- data/vendor/swagger-ui/src/main/html/images/logo_small.png +0 -0
- data/vendor/swagger-ui/src/main/html/images/pet_store_api.png +0 -0
- data/vendor/swagger-ui/src/main/html/images/throbber.gif +0 -0
- data/vendor/swagger-ui/src/main/html/images/wordnik_api.png +0 -0
- data/vendor/swagger-ui/src/main/html/index.html +78 -0
- data/vendor/swagger-ui/src/main/javascript/doc.js +184 -0
- data/vendor/swagger-ui/src/main/less/reset.less +50 -0
- data/vendor/swagger-ui/src/main/less/screen.less +67 -0
- data/vendor/swagger-ui/src/main/less/specs.less +1004 -0
- data/vendor/swagger-ui/src/main/template/content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/main.handlebars +22 -0
- data/vendor/swagger-ui/src/main/template/operation.handlebars +85 -0
- data/vendor/swagger-ui/src/main/template/param.handlebars +30 -0
- data/vendor/swagger-ui/src/main/template/param_list.handlebars +25 -0
- data/vendor/swagger-ui/src/main/template/param_readonly.handlebars +15 -0
- data/vendor/swagger-ui/src/main/template/param_readonly_required.handlebars +15 -0
- data/vendor/swagger-ui/src/main/template/param_required.handlebars +31 -0
- data/vendor/swagger-ui/src/main/template/parameter_content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/resource.handlebars +27 -0
- data/vendor/swagger-ui/src/main/template/response_content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/signature.handlebars +18 -0
- data/vendor/swagger-ui/src/main/template/status_code.handlebars +2 -0
- data/vendor/swagger-ui/src/test/spec.html +26 -0
- data/vendor/swagger-ui/src/test/swagger-ui-spec.coffee +49 -0
- data/vendor/swagger-ui/swagger-ui.json +20 -0
- metadata +240 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Underscore.js 1.3.3
|
|
2
|
+
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
|
3
|
+
// Underscore is freely distributable under the MIT license.
|
|
4
|
+
// Portions of Underscore are inspired or borrowed from Prototype,
|
|
5
|
+
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
|
6
|
+
// For all details and documentation:
|
|
7
|
+
// http://documentcloud.github.com/underscore
|
|
8
|
+
(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
|
|
9
|
+
c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
|
|
10
|
+
g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
|
|
11
|
+
c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
|
|
12
|
+
a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
|
|
13
|
+
c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
|
|
14
|
+
a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
|
|
15
|
+
function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
|
|
16
|
+
(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
|
|
17
|
+
j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
|
|
18
|
+
0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
|
|
19
|
+
e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
|
|
20
|
+
i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
|
|
21
|
+
1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
|
|
22
|
+
i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
|
|
23
|
+
g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
|
|
24
|
+
return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};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])&&
|
|
25
|
+
c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.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.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
|
|
26
|
+
function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
|
|
27
|
+
b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
|
|
28
|
+
b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
|
|
29
|
+
function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
|
|
30
|
+
u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
|
|
31
|
+
b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
|
|
32
|
+
this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "swagger-ui",
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "PATH=$PATH:./node_modules/.bin cake dist",
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/wordnik/swagger-ui.git"
|
|
12
|
+
},
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "Tony Tam",
|
|
15
|
+
"email": "fehguy@gmail.com",
|
|
16
|
+
"url": "http://developer.wordnik.com"
|
|
17
|
+
},
|
|
18
|
+
"license": "Apache",
|
|
19
|
+
"readmeFilename": "README.md",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"coffee-script": "~1.5.0",
|
|
22
|
+
"swagger-client": "2.0.14",
|
|
23
|
+
"handlebars": "~1.0.10",
|
|
24
|
+
"less": "~1.4.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
class SwaggerUi extends Backbone.Router
|
|
2
|
+
|
|
3
|
+
# Defaults
|
|
4
|
+
dom_id: "swagger_ui"
|
|
5
|
+
|
|
6
|
+
# Attributes
|
|
7
|
+
options: null
|
|
8
|
+
api: null
|
|
9
|
+
headerView: null
|
|
10
|
+
mainView: null
|
|
11
|
+
|
|
12
|
+
# SwaggerUi accepts all the same options as SwaggerApi
|
|
13
|
+
initialize: (options={}) ->
|
|
14
|
+
# Allow dom_id to be overridden
|
|
15
|
+
if options.dom_id?
|
|
16
|
+
@dom_id = options.dom_id
|
|
17
|
+
delete options.dom_id
|
|
18
|
+
|
|
19
|
+
# Create an empty div which contains the dom_id
|
|
20
|
+
$('body').append('<div id="' + @dom_id + '"></div>') if not $('#' + @dom_id)?
|
|
21
|
+
|
|
22
|
+
@options = options
|
|
23
|
+
|
|
24
|
+
# Set the callbacks
|
|
25
|
+
@options.success = => @render()
|
|
26
|
+
@options.progress = (d) => @showMessage(d)
|
|
27
|
+
@options.failure = (d) => @onLoadFailure(d)
|
|
28
|
+
|
|
29
|
+
# Create view to handle the header inputs
|
|
30
|
+
@headerView = new HeaderView({el: $('#header')})
|
|
31
|
+
|
|
32
|
+
# Event handler for when the baseUrl/apiKey is entered by user
|
|
33
|
+
@headerView.on 'update-swagger-ui', (data) => @updateSwaggerUi(data)
|
|
34
|
+
|
|
35
|
+
# Event handler for when url/key is received from user
|
|
36
|
+
updateSwaggerUi: (data) ->
|
|
37
|
+
@options.url = data.url
|
|
38
|
+
@load()
|
|
39
|
+
|
|
40
|
+
# Create an api and render
|
|
41
|
+
load: ->
|
|
42
|
+
# Initialize the API object
|
|
43
|
+
@mainView?.clear()
|
|
44
|
+
url = @options.url
|
|
45
|
+
if url.indexOf("http") isnt 0
|
|
46
|
+
url = @buildUrl(window.location.href.toString(), url)
|
|
47
|
+
|
|
48
|
+
@options.url = url
|
|
49
|
+
@headerView.update(url)
|
|
50
|
+
@api = new SwaggerApi(@options)
|
|
51
|
+
@api.build()
|
|
52
|
+
@api
|
|
53
|
+
|
|
54
|
+
# This is bound to success handler for SwaggerApi
|
|
55
|
+
# so it gets called when SwaggerApi completes loading
|
|
56
|
+
render:() ->
|
|
57
|
+
@showMessage('Finished Loading Resource Information. Rendering Swagger UI...')
|
|
58
|
+
@mainView = new MainView({model: @api, el: $('#' + @dom_id)}).render()
|
|
59
|
+
@showMessage()
|
|
60
|
+
switch @options.docExpansion
|
|
61
|
+
when "full" then Docs.expandOperationsForResource('')
|
|
62
|
+
when "list" then Docs.collapseOperationsForResource('')
|
|
63
|
+
@options.onComplete(@api, @) if @options.onComplete
|
|
64
|
+
setTimeout(
|
|
65
|
+
=>
|
|
66
|
+
Docs.shebang()
|
|
67
|
+
400
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
buildUrl: (base, url) ->
|
|
71
|
+
log "base is " + base
|
|
72
|
+
if url.indexOf("/") is 0
|
|
73
|
+
parts = base.split("/")
|
|
74
|
+
base = parts[0] + "//" + parts[2]
|
|
75
|
+
base + url
|
|
76
|
+
else
|
|
77
|
+
endOfPath = base.length
|
|
78
|
+
if base.indexOf("?") > -1
|
|
79
|
+
endOfPath = Math.min(endOfPath, base.indexOf("?"))
|
|
80
|
+
if base.indexOf("#") > -1
|
|
81
|
+
endOfPath = Math.min(endOfPath, base.indexOf("#"))
|
|
82
|
+
base = base.substring(0, endOfPath);
|
|
83
|
+
if base.indexOf( "/", base.length - 1 ) isnt -1
|
|
84
|
+
return base + url
|
|
85
|
+
return base + "/" + url
|
|
86
|
+
|
|
87
|
+
# Shows message on topbar of the ui
|
|
88
|
+
showMessage: (data = '') ->
|
|
89
|
+
$('#message-bar').removeClass 'message-fail'
|
|
90
|
+
$('#message-bar').addClass 'message-success'
|
|
91
|
+
$('#message-bar').html data
|
|
92
|
+
|
|
93
|
+
# shows message in red
|
|
94
|
+
onLoadFailure: (data = '') ->
|
|
95
|
+
$('#message-bar').removeClass 'message-success'
|
|
96
|
+
$('#message-bar').addClass 'message-fail'
|
|
97
|
+
val = $('#message-bar').html data
|
|
98
|
+
@options.onFailure(data) if @options.onFailure?
|
|
99
|
+
val
|
|
100
|
+
|
|
101
|
+
window.SwaggerUi = SwaggerUi
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class ContentTypeView extends Backbone.View
|
|
2
|
+
initialize: ->
|
|
3
|
+
|
|
4
|
+
render: ->
|
|
5
|
+
template = @template()
|
|
6
|
+
$(@el).html(template(@model))
|
|
7
|
+
|
|
8
|
+
$('label[for=contentType]', $(@el)).text('Response Content Type')
|
|
9
|
+
|
|
10
|
+
@
|
|
11
|
+
|
|
12
|
+
template: ->
|
|
13
|
+
Handlebars.templates.content_type
|
|
14
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class HeaderView extends Backbone.View
|
|
2
|
+
events: {
|
|
3
|
+
'click #show-pet-store-icon' : 'showPetStore'
|
|
4
|
+
'click #show-wordnik-dev-icon' : 'showWordnikDev'
|
|
5
|
+
'click #explore' : 'showCustom'
|
|
6
|
+
'keyup #input_baseUrl' : 'showCustomOnKeyup'
|
|
7
|
+
'keyup #input_apiKey' : 'showCustomOnKeyup'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
initialize: ->
|
|
11
|
+
|
|
12
|
+
showPetStore: (e) ->
|
|
13
|
+
@trigger(
|
|
14
|
+
'update-swagger-ui'
|
|
15
|
+
{url:"http://petstore.swagger.wordnik.com/api/api-docs"}
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
showWordnikDev: (e) ->
|
|
19
|
+
@trigger(
|
|
20
|
+
'update-swagger-ui'
|
|
21
|
+
{url:"http://api.wordnik.com/v4/resources.json"}
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
showCustomOnKeyup: (e) ->
|
|
25
|
+
@showCustom() if e.keyCode is 13
|
|
26
|
+
|
|
27
|
+
showCustom: (e) ->
|
|
28
|
+
e?.preventDefault()
|
|
29
|
+
@trigger(
|
|
30
|
+
'update-swagger-ui'
|
|
31
|
+
{url: $('#input_baseUrl').val(), apiKey: $('#input_apiKey').val()}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
update: (url, apiKey, trigger = false) ->
|
|
35
|
+
$('#input_baseUrl').val url
|
|
36
|
+
#$('#input_apiKey').val apiKey
|
|
37
|
+
@trigger 'update-swagger-ui', {url:url} if trigger
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class MainView extends Backbone.View
|
|
2
|
+
initialize: ->
|
|
3
|
+
|
|
4
|
+
render: ->
|
|
5
|
+
# Render the outer container for resources
|
|
6
|
+
$(@el).html(Handlebars.templates.main(@model))
|
|
7
|
+
|
|
8
|
+
# Render each resource
|
|
9
|
+
@addResource resource for resource in @model.apisArray
|
|
10
|
+
@
|
|
11
|
+
|
|
12
|
+
addResource: (resource) ->
|
|
13
|
+
# Render a resource and add it to resources li
|
|
14
|
+
resourceView = new ResourceView({model: resource, tagName: 'li', id: 'resource_' + resource.name, className: 'resource'})
|
|
15
|
+
$('#resources').append resourceView.render().el
|
|
16
|
+
|
|
17
|
+
clear: ->
|
|
18
|
+
$(@el).html ''
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
class OperationView extends Backbone.View
|
|
2
|
+
invocationUrl: null
|
|
3
|
+
|
|
4
|
+
events: {
|
|
5
|
+
'submit .sandbox' : 'submitOperation'
|
|
6
|
+
'click .submit' : 'submitOperation'
|
|
7
|
+
'click .response_hider' : 'hideResponse'
|
|
8
|
+
'click .toggleOperation' : 'toggleOperationContent'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
initialize: ->
|
|
12
|
+
|
|
13
|
+
render: ->
|
|
14
|
+
isMethodSubmissionSupported = true #jQuery.inArray(@model.method, @model.supportedSubmitMethods) >= 0
|
|
15
|
+
@model.isReadOnly = true unless isMethodSubmissionSupported
|
|
16
|
+
|
|
17
|
+
$(@el).html(Handlebars.templates.operation(@model))
|
|
18
|
+
|
|
19
|
+
if @model.responseClassSignature and @model.responseClassSignature != 'string'
|
|
20
|
+
signatureModel =
|
|
21
|
+
sampleJSON: @model.responseSampleJSON
|
|
22
|
+
isParam: false
|
|
23
|
+
signature: @model.responseClassSignature
|
|
24
|
+
|
|
25
|
+
responseSignatureView = new SignatureView({model: signatureModel, tagName: 'div'})
|
|
26
|
+
$('.model-signature', $(@el)).append responseSignatureView.render().el
|
|
27
|
+
else
|
|
28
|
+
$('.model-signature', $(@el)).html(@model.type)
|
|
29
|
+
|
|
30
|
+
contentTypeModel =
|
|
31
|
+
isParam: false
|
|
32
|
+
|
|
33
|
+
contentTypeModel.consumes = @model.consumes
|
|
34
|
+
contentTypeModel.produces = @model.produces
|
|
35
|
+
|
|
36
|
+
for param in @model.parameters
|
|
37
|
+
type = param.type || param.dataType
|
|
38
|
+
if type.toLowerCase() == 'file'
|
|
39
|
+
if !contentTypeModel.consumes
|
|
40
|
+
log "set content type "
|
|
41
|
+
contentTypeModel.consumes = 'multipart/form-data'
|
|
42
|
+
|
|
43
|
+
responseContentTypeView = new ResponseContentTypeView({model: contentTypeModel})
|
|
44
|
+
$('.response-content-type', $(@el)).append responseContentTypeView.render().el
|
|
45
|
+
|
|
46
|
+
# Render each parameter
|
|
47
|
+
@addParameter param, contentTypeModel.consumes for param in @model.parameters
|
|
48
|
+
|
|
49
|
+
# Render each response code
|
|
50
|
+
@addStatusCode statusCode for statusCode in @model.responseMessages
|
|
51
|
+
|
|
52
|
+
@
|
|
53
|
+
|
|
54
|
+
addParameter: (param, consumes) ->
|
|
55
|
+
# Render a parameter
|
|
56
|
+
param.consumes = consumes
|
|
57
|
+
paramView = new ParameterView({model: param, tagName: 'tr', readOnly: @model.isReadOnly})
|
|
58
|
+
$('.operation-params', $(@el)).append paramView.render().el
|
|
59
|
+
|
|
60
|
+
addStatusCode: (statusCode) ->
|
|
61
|
+
# Render status codes
|
|
62
|
+
statusCodeView = new StatusCodeView({model: statusCode, tagName: 'tr'})
|
|
63
|
+
$('.operation-status', $(@el)).append statusCodeView.render().el
|
|
64
|
+
|
|
65
|
+
submitOperation: (e) ->
|
|
66
|
+
e?.preventDefault()
|
|
67
|
+
# Check for errors
|
|
68
|
+
form = $('.sandbox', $(@el))
|
|
69
|
+
error_free = true
|
|
70
|
+
form.find("input.required").each ->
|
|
71
|
+
$(@).removeClass "error"
|
|
72
|
+
if jQuery.trim($(@).val()) is ""
|
|
73
|
+
$(@).addClass "error"
|
|
74
|
+
$(@).wiggle
|
|
75
|
+
callback: => $(@).focus()
|
|
76
|
+
error_free = false
|
|
77
|
+
|
|
78
|
+
# if error free submit it
|
|
79
|
+
if error_free
|
|
80
|
+
map = {}
|
|
81
|
+
opts = {parent: @}
|
|
82
|
+
|
|
83
|
+
isFileUpload = false
|
|
84
|
+
|
|
85
|
+
for o in form.find("input")
|
|
86
|
+
if(o.value? && jQuery.trim(o.value).length > 0)
|
|
87
|
+
map[o.name] = o.value
|
|
88
|
+
if o.type is "file"
|
|
89
|
+
isFileUpload = true
|
|
90
|
+
|
|
91
|
+
for o in form.find("textarea")
|
|
92
|
+
if(o.value? && jQuery.trim(o.value).length > 0)
|
|
93
|
+
map["body"] = o.value
|
|
94
|
+
|
|
95
|
+
for o in form.find("select")
|
|
96
|
+
val = this.getSelectedValue o
|
|
97
|
+
if(val? && jQuery.trim(val).length > 0)
|
|
98
|
+
map[o.name] = val
|
|
99
|
+
|
|
100
|
+
opts.responseContentType = $("div select[name=responseContentType]", $(@el)).val()
|
|
101
|
+
opts.requestContentType = $("div select[name=parameterContentType]", $(@el)).val()
|
|
102
|
+
|
|
103
|
+
$(".response_throbber", $(@el)).show()
|
|
104
|
+
if isFileUpload
|
|
105
|
+
@handleFileUpload map, form
|
|
106
|
+
else
|
|
107
|
+
@model.do(map, opts, @showCompleteStatus, @showErrorStatus, @)
|
|
108
|
+
|
|
109
|
+
success: (response, parent) ->
|
|
110
|
+
parent.showCompleteStatus response
|
|
111
|
+
|
|
112
|
+
handleFileUpload: (map, form) ->
|
|
113
|
+
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
|
+
log headerParams
|
|
133
|
+
|
|
134
|
+
# add files
|
|
135
|
+
for el in form.find('input[type~="file"]')
|
|
136
|
+
bodyParam.append($(el).attr('name'), el.files[0])
|
|
137
|
+
|
|
138
|
+
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
|
+
|
|
174
|
+
wrap: (data) ->
|
|
175
|
+
headers = {}
|
|
176
|
+
headerArray = data.getAllResponseHeaders().split(":")
|
|
177
|
+
for i in [0..headerArray.length/2] by (2)
|
|
178
|
+
headers[headerArray[i]] = headerArray[i+1]
|
|
179
|
+
|
|
180
|
+
o = {}
|
|
181
|
+
o.content = {}
|
|
182
|
+
o.content.data = data.responseText
|
|
183
|
+
o.headers = headers
|
|
184
|
+
o.request = {}
|
|
185
|
+
o.request.url = @invocationUrl
|
|
186
|
+
o.status = data.status
|
|
187
|
+
o
|
|
188
|
+
|
|
189
|
+
getSelectedValue: (select) ->
|
|
190
|
+
if !select.multiple
|
|
191
|
+
select.value
|
|
192
|
+
else
|
|
193
|
+
options = []
|
|
194
|
+
options.push opt.value for opt in select.options when opt.selected
|
|
195
|
+
if options.length > 0
|
|
196
|
+
options.join ","
|
|
197
|
+
else
|
|
198
|
+
null
|
|
199
|
+
|
|
200
|
+
# handler for hide response link
|
|
201
|
+
hideResponse: (e) ->
|
|
202
|
+
e?.preventDefault()
|
|
203
|
+
$(".response", $(@el)).slideUp()
|
|
204
|
+
$(".response_hider", $(@el)).fadeOut()
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
# Show response from server
|
|
208
|
+
showResponse: (response) ->
|
|
209
|
+
prettyJson = JSON.stringify(response, null, "\t").replace(/\n/g, "<br>")
|
|
210
|
+
$(".response_body", $(@el)).html escape(prettyJson)
|
|
211
|
+
|
|
212
|
+
# Show error from server
|
|
213
|
+
showErrorStatus: (data, parent) ->
|
|
214
|
+
parent.showStatus data
|
|
215
|
+
|
|
216
|
+
# show the status codes
|
|
217
|
+
showCompleteStatus: (data, parent) ->
|
|
218
|
+
parent.showStatus data
|
|
219
|
+
|
|
220
|
+
# Adapted from http://stackoverflow.com/a/2893259/454004
|
|
221
|
+
formatXml: (xml) ->
|
|
222
|
+
reg = /(>)(<)(\/*)/g
|
|
223
|
+
wsexp = /[ ]*(.*)[ ]+\n/g
|
|
224
|
+
contexp = /(<.+>)(.+\n)/g
|
|
225
|
+
xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2')
|
|
226
|
+
pad = 0
|
|
227
|
+
formatted = ''
|
|
228
|
+
lines = xml.split('\n')
|
|
229
|
+
indent = 0
|
|
230
|
+
lastType = 'other'
|
|
231
|
+
# 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions
|
|
232
|
+
transitions =
|
|
233
|
+
'single->single': 0
|
|
234
|
+
'single->closing': -1
|
|
235
|
+
'single->opening': 0
|
|
236
|
+
'single->other': 0
|
|
237
|
+
'closing->single': 0
|
|
238
|
+
'closing->closing': -1
|
|
239
|
+
'closing->opening': 0
|
|
240
|
+
'closing->other': 0
|
|
241
|
+
'opening->single': 1
|
|
242
|
+
'opening->closing': 0
|
|
243
|
+
'opening->opening': 1
|
|
244
|
+
'opening->other': 1
|
|
245
|
+
'other->single': 0
|
|
246
|
+
'other->closing': -1
|
|
247
|
+
'other->opening': 0
|
|
248
|
+
'other->other': 0
|
|
249
|
+
|
|
250
|
+
for ln in lines
|
|
251
|
+
do (ln) ->
|
|
252
|
+
|
|
253
|
+
types =
|
|
254
|
+
# is this line a single tag? ex. <br />
|
|
255
|
+
single: Boolean(ln.match(/<.+\/>/))
|
|
256
|
+
# is this a closing tag? ex. </a>
|
|
257
|
+
closing: Boolean(ln.match(/<\/.+>/))
|
|
258
|
+
# is this even a tag (that's not <!something>)
|
|
259
|
+
opening: Boolean(ln.match(/<[^!?].*>/))
|
|
260
|
+
|
|
261
|
+
[type] = (key for key, value of types when value)
|
|
262
|
+
type = if type is undefined then 'other' else type
|
|
263
|
+
|
|
264
|
+
fromTo = lastType + '->' + type
|
|
265
|
+
lastType = type
|
|
266
|
+
padding = ''
|
|
267
|
+
|
|
268
|
+
indent += transitions[fromTo]
|
|
269
|
+
padding = (' ' for j in [0...(indent)]).join('')
|
|
270
|
+
if fromTo == 'opening->closing'
|
|
271
|
+
#substr removes line break (\n) from prev loop
|
|
272
|
+
formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'
|
|
273
|
+
else
|
|
274
|
+
formatted += padding + ln + '\n'
|
|
275
|
+
|
|
276
|
+
formatted
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
# puts the response data in UI
|
|
280
|
+
showStatus: (response) ->
|
|
281
|
+
content = response.data
|
|
282
|
+
headers = response.headers
|
|
283
|
+
|
|
284
|
+
# if server is nice, and sends content-type back, we can use it
|
|
285
|
+
contentType = if headers && headers["Content-Type"] then headers["Content-Type"].split(";")[0].trim() else null
|
|
286
|
+
|
|
287
|
+
if !content
|
|
288
|
+
code = $('<code />').text("no content")
|
|
289
|
+
pre = $('<pre class="json" />').append(code)
|
|
290
|
+
else if contentType is "application/json" || /\+json$/.test(contentType)
|
|
291
|
+
code = $('<code />').text(JSON.stringify(JSON.parse(content), null, " "))
|
|
292
|
+
pre = $('<pre class="json" />').append(code)
|
|
293
|
+
else if contentType is "application/xml" || /\+xml$/.test(contentType)
|
|
294
|
+
code = $('<code />').text(@formatXml(content))
|
|
295
|
+
pre = $('<pre class="xml" />').append(code)
|
|
296
|
+
else if contentType is "text/html"
|
|
297
|
+
code = $('<code />').html(content)
|
|
298
|
+
pre = $('<pre class="xml" />').append(code)
|
|
299
|
+
else if /^image\//.test(contentType)
|
|
300
|
+
pre = $('<img>').attr('src',response.url)
|
|
301
|
+
else
|
|
302
|
+
# don't know what to render!
|
|
303
|
+
code = $('<code />').text(content)
|
|
304
|
+
pre = $('<pre class="json" />').append(code)
|
|
305
|
+
|
|
306
|
+
response_body = pre
|
|
307
|
+
$(".request_url", $(@el)).html "<pre>" + response.url + "</pre>"
|
|
308
|
+
$(".response_code", $(@el)).html "<pre>" + response.status + "</pre>"
|
|
309
|
+
$(".response_body", $(@el)).html response_body
|
|
310
|
+
$(".response_headers", $(@el)).html "<pre>" + JSON.stringify(response.headers, null, " ").replace(/\n/g, "<br>") + "</pre>"
|
|
311
|
+
$(".response", $(@el)).slideDown()
|
|
312
|
+
$(".response_hider", $(@el)).show()
|
|
313
|
+
$(".response_throbber", $(@el)).hide()
|
|
314
|
+
hljs.highlightBlock($('.response_body', $(@el))[0])
|
|
315
|
+
|
|
316
|
+
toggleOperationContent: ->
|
|
317
|
+
elem = $('#' + Docs.escapeResourceName(@model.resourceName) + "_" + @model.nickname + "_" + @model.method + "_" + @model.number + "_content")
|
|
318
|
+
if elem.is(':visible') then Docs.collapseOperation(elem) else Docs.expandOperation(elem)
|