swagger_ui_generator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +23 -0
  7. data/lib/generators/swagger_ui_generator/install/install_generator.rb +22 -0
  8. data/lib/generators/swagger_ui_generator/install/templates/public/api-docs.html.erb +73 -0
  9. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/highlight.default.css +135 -0
  10. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/screen.css +1070 -0
  11. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/backbone-min.js +38 -0
  12. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/handlebars-1.0.0.js +2278 -0
  13. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/highlight.7.3.pack.js +1 -0
  14. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery-1.8.0.min.js +2 -0
  15. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.ba-bbq.min.js +18 -0
  16. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.slideto.min.js +1 -0
  17. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.wiggle.min.js +8 -0
  18. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred.bundle.js +2765 -0
  19. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred/content.js +193 -0
  20. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/swagger.js +1311 -0
  21. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/underscore-min.js +32 -0
  22. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/swagger-ui.js +2129 -0
  23. data/lib/generators/swagger_ui_generator/install/templates/public/swagger/throbber.gif +0 -0
  24. data/lib/swagger_ui_generator.rb +5 -0
  25. data/lib/swagger_ui_generator/importer.rb +97 -0
  26. data/lib/swagger_ui_generator/version.rb +3 -0
  27. data/swagger_ui_generator.gemspec +28 -0
  28. data/test/lib/generators/swagger_ui_generator/install_generator_test.rb +73 -0
  29. data/test/test_helper.rb +19 -0
  30. data/vendor/swagger-ui/.gitignore +22 -0
  31. data/vendor/swagger-ui/.npmignore +7 -0
  32. data/vendor/swagger-ui/Cakefile +132 -0
  33. data/vendor/swagger-ui/README.md +110 -0
  34. data/vendor/swagger-ui/dist/css/highlight.default.css +135 -0
  35. data/vendor/swagger-ui/dist/css/screen.css +1070 -0
  36. data/vendor/swagger-ui/dist/images/logo_small.png +0 -0
  37. data/vendor/swagger-ui/dist/images/pet_store_api.png +0 -0
  38. data/vendor/swagger-ui/dist/images/throbber.gif +0 -0
  39. data/vendor/swagger-ui/dist/images/wordnik_api.png +0 -0
  40. data/vendor/swagger-ui/dist/index.html +78 -0
  41. data/vendor/swagger-ui/dist/lib/backbone-min.js +38 -0
  42. data/vendor/swagger-ui/dist/lib/handlebars-1.0.0.js +2278 -0
  43. data/vendor/swagger-ui/dist/lib/highlight.7.3.pack.js +1 -0
  44. data/vendor/swagger-ui/dist/lib/jquery-1.8.0.min.js +2 -0
  45. data/vendor/swagger-ui/dist/lib/jquery.ba-bbq.min.js +18 -0
  46. data/vendor/swagger-ui/dist/lib/jquery.slideto.min.js +1 -0
  47. data/vendor/swagger-ui/dist/lib/jquery.wiggle.min.js +8 -0
  48. data/vendor/swagger-ui/dist/lib/shred.bundle.js +2765 -0
  49. data/vendor/swagger-ui/dist/lib/shred/content.js +193 -0
  50. data/vendor/swagger-ui/dist/lib/swagger.js +1311 -0
  51. data/vendor/swagger-ui/dist/lib/underscore-min.js +32 -0
  52. data/vendor/swagger-ui/dist/swagger-ui.js +2129 -0
  53. data/vendor/swagger-ui/dist/swagger-ui.min.js +1 -0
  54. data/vendor/swagger-ui/lib/backbone-min.js +38 -0
  55. data/vendor/swagger-ui/lib/handlebars-1.0.0.js +2278 -0
  56. data/vendor/swagger-ui/lib/highlight.7.3.pack.js +1 -0
  57. data/vendor/swagger-ui/lib/jquery-1.8.0.min.js +2 -0
  58. data/vendor/swagger-ui/lib/jquery.ba-bbq.min.js +18 -0
  59. data/vendor/swagger-ui/lib/jquery.slideto.min.js +1 -0
  60. data/vendor/swagger-ui/lib/jquery.wiggle.min.js +8 -0
  61. data/vendor/swagger-ui/lib/shred.bundle.js +2765 -0
  62. data/vendor/swagger-ui/lib/shred/content.js +193 -0
  63. data/vendor/swagger-ui/lib/swagger.js +1311 -0
  64. data/vendor/swagger-ui/lib/underscore-min.js +32 -0
  65. data/vendor/swagger-ui/package.json +26 -0
  66. data/vendor/swagger-ui/src/main/coffeescript/SwaggerUi.coffee +101 -0
  67. data/vendor/swagger-ui/src/main/coffeescript/view/ContentTypeView.coffee +14 -0
  68. data/vendor/swagger-ui/src/main/coffeescript/view/HeaderView.coffee +37 -0
  69. data/vendor/swagger-ui/src/main/coffeescript/view/MainView.coffee +18 -0
  70. data/vendor/swagger-ui/src/main/coffeescript/view/OperationView.coffee +318 -0
  71. data/vendor/swagger-ui/src/main/coffeescript/view/ParameterContentTypeView.coffee +14 -0
  72. data/vendor/swagger-ui/src/main/coffeescript/view/ParameterView.coffee +57 -0
  73. data/vendor/swagger-ui/src/main/coffeescript/view/ResourceView.coffee +21 -0
  74. data/vendor/swagger-ui/src/main/coffeescript/view/ResponseContentTypeView.coffee +14 -0
  75. data/vendor/swagger-ui/src/main/coffeescript/view/SignatureView.coffee +51 -0
  76. data/vendor/swagger-ui/src/main/coffeescript/view/StatusCodeView.coffee +11 -0
  77. data/vendor/swagger-ui/src/main/html/css/highlight.default.css +135 -0
  78. data/vendor/swagger-ui/src/main/html/css/screen.css +1070 -0
  79. data/vendor/swagger-ui/src/main/html/images/logo_small.png +0 -0
  80. data/vendor/swagger-ui/src/main/html/images/pet_store_api.png +0 -0
  81. data/vendor/swagger-ui/src/main/html/images/throbber.gif +0 -0
  82. data/vendor/swagger-ui/src/main/html/images/wordnik_api.png +0 -0
  83. data/vendor/swagger-ui/src/main/html/index.html +78 -0
  84. data/vendor/swagger-ui/src/main/javascript/doc.js +184 -0
  85. data/vendor/swagger-ui/src/main/less/reset.less +50 -0
  86. data/vendor/swagger-ui/src/main/less/screen.less +67 -0
  87. data/vendor/swagger-ui/src/main/less/specs.less +1004 -0
  88. data/vendor/swagger-ui/src/main/template/content_type.handlebars +10 -0
  89. data/vendor/swagger-ui/src/main/template/main.handlebars +22 -0
  90. data/vendor/swagger-ui/src/main/template/operation.handlebars +85 -0
  91. data/vendor/swagger-ui/src/main/template/param.handlebars +30 -0
  92. data/vendor/swagger-ui/src/main/template/param_list.handlebars +25 -0
  93. data/vendor/swagger-ui/src/main/template/param_readonly.handlebars +15 -0
  94. data/vendor/swagger-ui/src/main/template/param_readonly_required.handlebars +15 -0
  95. data/vendor/swagger-ui/src/main/template/param_required.handlebars +31 -0
  96. data/vendor/swagger-ui/src/main/template/parameter_content_type.handlebars +10 -0
  97. data/vendor/swagger-ui/src/main/template/resource.handlebars +27 -0
  98. data/vendor/swagger-ui/src/main/template/response_content_type.handlebars +10 -0
  99. data/vendor/swagger-ui/src/main/template/signature.handlebars +18 -0
  100. data/vendor/swagger-ui/src/main/template/status_code.handlebars +2 -0
  101. data/vendor/swagger-ui/src/test/spec.html +26 -0
  102. data/vendor/swagger-ui/src/test/swagger-ui-spec.coffee +49 -0
  103. data/vendor/swagger-ui/swagger-ui.json +20 -0
  104. metadata +240 -0
@@ -0,0 +1,78 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Swagger UI</title>
5
+ <link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
6
+ <link href='css/highlight.default.css' media='screen' rel='stylesheet' type='text/css'/>
7
+ <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
8
+ <script type="text/javascript" src="lib/shred.bundle.js"></script>
9
+ <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
10
+ <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
11
+ <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
12
+ <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
13
+ <script src='lib/handlebars-1.0.0.js' type='text/javascript'></script>
14
+ <script src='lib/underscore-min.js' type='text/javascript'></script>
15
+ <script src='lib/backbone-min.js' type='text/javascript'></script>
16
+ <script src='lib/swagger.js' type='text/javascript'></script>
17
+ <script src='swagger-ui.js' type='text/javascript'></script>
18
+ <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
19
+ <script type="text/javascript">
20
+ $(function () {
21
+ window.swaggerUi = new SwaggerUi({
22
+ url: "http://petstore.swagger.wordnik.com/api/api-docs",
23
+ dom_id: "swagger-ui-container",
24
+ supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
25
+ onComplete: function(swaggerApi, swaggerUi){
26
+ log("Loaded SwaggerUI")
27
+ $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
28
+ },
29
+ onFailure: function(data) {
30
+ log("Unable to Load SwaggerUI");
31
+ },
32
+ docExpansion: "none"
33
+ });
34
+
35
+ $('#input_apiKey').change(function() {
36
+ var key = $('#input_apiKey')[0].value;
37
+ log("key: " + key);
38
+ if(key && key.trim() != "") {
39
+ log("added key " + key);
40
+ window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "query"));
41
+ }
42
+ })
43
+ window.swaggerUi.load();
44
+ });
45
+
46
+ </script>
47
+ </head>
48
+
49
+ <body>
50
+ <div id='header'>
51
+ <div class="swagger-ui-wrap">
52
+ <a id="logo" href="http://swagger.wordnik.com">swagger</a>
53
+
54
+ <form id='api_selector'>
55
+ <div class='input icon-btn'>
56
+ <img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis">
57
+ </div>
58
+ <div class='input icon-btn'>
59
+ <img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis">
60
+ </div>
61
+ <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
62
+ <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
63
+ <div class='input'><a id="explore" href="#">Explore</a></div>
64
+ </form>
65
+ </div>
66
+ </div>
67
+
68
+ <div id="message-bar" class="swagger-ui-wrap">
69
+ &nbsp;
70
+ </div>
71
+
72
+ <div id="swagger-ui-container" class="swagger-ui-wrap">
73
+
74
+ </div>
75
+
76
+ </body>
77
+
78
+ </html>
@@ -0,0 +1,184 @@
1
+ $(function() {
2
+
3
+ // Helper function for vertically aligning DOM elements
4
+ // http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/
5
+ $.fn.vAlign = function() {
6
+ return this.each(function(i){
7
+ var ah = $(this).height();
8
+ var ph = $(this).parent().height();
9
+ var mh = (ph - ah) / 2;
10
+ $(this).css('margin-top', mh);
11
+ });
12
+ };
13
+
14
+ $.fn.stretchFormtasticInputWidthToParent = function() {
15
+ return this.each(function(i){
16
+ var p_width = $(this).closest("form").innerWidth();
17
+ var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest("form").css('padding-right'), 10);
18
+ var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10);
19
+ $(this).css('width', p_width - p_padding - this_padding);
20
+ });
21
+ };
22
+
23
+ $('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent();
24
+
25
+ // Vertically center these paragraphs
26
+ // Parent may need a min-height for this to work..
27
+ $('ul.downplayed li div.content p').vAlign();
28
+
29
+ // When a sandbox form is submitted..
30
+ $("form.sandbox").submit(function(){
31
+
32
+ var error_free = true;
33
+
34
+ // Cycle through the forms required inputs
35
+ $(this).find("input.required").each(function() {
36
+
37
+ // Remove any existing error styles from the input
38
+ $(this).removeClass('error');
39
+
40
+ // Tack the error style on if the input is empty..
41
+ if ($(this).val() == '') {
42
+ $(this).addClass('error');
43
+ $(this).wiggle();
44
+ error_free = false;
45
+ }
46
+
47
+ });
48
+
49
+ return error_free;
50
+ });
51
+
52
+ });
53
+
54
+ function clippyCopiedCallback(a) {
55
+ $('#api_key_copied').fadeIn().delay(1000).fadeOut();
56
+
57
+ // var b = $("#clippy_tooltip_" + a);
58
+ // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() {
59
+ // b.attr("title", "copy to clipboard")
60
+ // },
61
+ // 500))
62
+ }
63
+
64
+ // Logging function that accounts for browsers that don't have window.console
65
+ function log() {
66
+ if (window.console) console.log.apply(console,arguments);
67
+ }
68
+ // Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)
69
+ if (Function.prototype.bind && console && typeof console.log == "object") {
70
+ [
71
+ "log","info","warn","error","assert","dir","clear","profile","profileEnd"
72
+ ].forEach(function (method) {
73
+ console[method] = this.bind(console[method], console);
74
+ }, Function.prototype.call);
75
+ }
76
+
77
+ var Docs = {
78
+
79
+ shebang: function() {
80
+
81
+ // If shebang has an operation nickname in it..
82
+ // e.g. /docs/#!/words/get_search
83
+ var fragments = $.param.fragment().split('/');
84
+ fragments.shift(); // get rid of the bang
85
+
86
+ switch (fragments.length) {
87
+ case 1:
88
+ // Expand all operations for the resource and scroll to it
89
+ // log('shebang resource:' + fragments[0]);
90
+ var dom_id = 'resource_' + fragments[0];
91
+
92
+ Docs.expandEndpointListForResource(fragments[0]);
93
+ $("#"+dom_id).slideto({highlight: false});
94
+ break;
95
+ case 2:
96
+ // Refer to the endpoint DOM element, e.g. #words_get_search
97
+ // log('shebang endpoint: ' + fragments.join('_'));
98
+
99
+ // Expand Resource
100
+ Docs.expandEndpointListForResource(fragments[0]);
101
+ $("#"+dom_id).slideto({highlight: false});
102
+
103
+ // Expand operation
104
+ var li_dom_id = fragments.join('_');
105
+ var li_content_dom_id = li_dom_id + "_content";
106
+
107
+ // log("li_dom_id " + li_dom_id);
108
+ // log("li_content_dom_id " + li_content_dom_id);
109
+
110
+ Docs.expandOperation($('#'+li_content_dom_id));
111
+ $('#'+li_dom_id).slideto({highlight: false});
112
+ break;
113
+ }
114
+
115
+ },
116
+
117
+ toggleEndpointListForResource: function(resource) {
118
+ var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints');
119
+ if (elem.is(':visible')) {
120
+ Docs.collapseEndpointListForResource(resource);
121
+ } else {
122
+ Docs.expandEndpointListForResource(resource);
123
+ }
124
+ },
125
+
126
+ // Expand resource
127
+ expandEndpointListForResource: function(resource) {
128
+ var resource = Docs.escapeResourceName(resource);
129
+ if (resource == '') {
130
+ $('.resource ul.endpoints').slideDown();
131
+ return;
132
+ }
133
+
134
+ $('li#resource_' + resource).addClass('active');
135
+
136
+ var elem = $('li#resource_' + resource + ' ul.endpoints');
137
+ elem.slideDown();
138
+ },
139
+
140
+ // Collapse resource and mark as explicitly closed
141
+ collapseEndpointListForResource: function(resource) {
142
+ var resource = Docs.escapeResourceName(resource);
143
+ $('li#resource_' + resource).removeClass('active');
144
+
145
+ var elem = $('li#resource_' + resource + ' ul.endpoints');
146
+ elem.slideUp();
147
+ },
148
+
149
+ expandOperationsForResource: function(resource) {
150
+ // Make sure the resource container is open..
151
+ Docs.expandEndpointListForResource(resource);
152
+
153
+ if (resource == '') {
154
+ $('.resource ul.endpoints li.operation div.content').slideDown();
155
+ return;
156
+ }
157
+
158
+ $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
159
+ Docs.expandOperation($(this));
160
+ });
161
+ },
162
+
163
+ collapseOperationsForResource: function(resource) {
164
+ // Make sure the resource container is open..
165
+ Docs.expandEndpointListForResource(resource);
166
+
167
+ $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
168
+ Docs.collapseOperation($(this));
169
+ });
170
+ },
171
+
172
+ escapeResourceName: function(resource) {
173
+ return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&");
174
+ },
175
+
176
+ expandOperation: function(elem) {
177
+ elem.slideDown();
178
+ },
179
+
180
+ collapseOperation: function(elem) {
181
+ elem.slideUp();
182
+ }
183
+
184
+ };
@@ -0,0 +1,50 @@
1
+ /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */
2
+ html, body, div, span, applet, object, iframe,
3
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
4
+ a, abbr, acronym, address, big, cite, code,
5
+ del, dfn, em, img, ins, kbd, q, s, samp,
6
+ small, strike, strong, sub, sup, tt, var,
7
+ b, u, i, center,
8
+ dl, dt, dd, ol, ul, li,
9
+ fieldset, form, label, legend,
10
+ table, caption, tbody, tfoot, thead, tr, th, td,
11
+ article, aside, canvas, details, embed,
12
+ figure, figcaption, footer, header, hgroup,
13
+ menu, nav, output, ruby, section, summary,
14
+ time, mark, audio, video {
15
+ margin: 0;
16
+ padding: 0;
17
+ border: 0;
18
+ font-size: 100%;
19
+ font: inherit;
20
+ vertical-align: baseline;
21
+ }
22
+
23
+ /* HTML5 display-role reset for older browsers */
24
+ article, aside, details, figcaption, figure,
25
+ footer, header, hgroup, menu, nav, section {
26
+ display: block;
27
+ }
28
+
29
+ body {
30
+ line-height: 1;
31
+ }
32
+
33
+ ol, ul {
34
+ list-style: none;
35
+ }
36
+
37
+ blockquote, q {
38
+ quotes: none;
39
+ }
40
+
41
+ blockquote:before, blockquote:after,
42
+ q:before, q:after {
43
+ content: '';
44
+ content: none;
45
+ }
46
+
47
+ table {
48
+ border-collapse: collapse;
49
+ border-spacing: 0;
50
+ }
@@ -0,0 +1,67 @@
1
+ @import 'src/main/less/reset.less';
2
+ @import 'src/main/less/specs.less';
3
+
4
+ #header {
5
+ background-color: #89bf04;
6
+ padding: 14px;
7
+ a#logo {
8
+ font-size: 1.5em;
9
+ font-weight: bold;
10
+ text-decoration: none;
11
+ background: transparent url(../images/logo_small.png) no-repeat left center;
12
+ padding: 20px 0 20px 40px;
13
+ color: white;
14
+ }
15
+ form#api_selector {
16
+ display: block;
17
+ clear: none;
18
+ float: right;
19
+ .input {
20
+ display: block;
21
+ clear: none;
22
+ float: left;
23
+ margin: 0 10px 0 0;
24
+ input#input_apiKey {
25
+ width: 200px;
26
+ }
27
+ input#input_baseUrl {
28
+ width: 400px;
29
+ }
30
+ a#explore {
31
+ display: block;
32
+ text-decoration: none;
33
+ font-weight: bold;
34
+ padding: 6px 8px;
35
+ font-size: 0.9em;
36
+ color: white;
37
+ background-color: #547f00;
38
+ -moz-border-radius: 4px;
39
+ -webkit-border-radius: 4px;
40
+ -o-border-radius: 4px;
41
+ -ms-border-radius: 4px;
42
+ -khtml-border-radius: 4px;
43
+ border-radius: 4px;
44
+ }
45
+ a#explore:hover {
46
+ background-color: #547f00;
47
+ }
48
+ input {
49
+ font-size: 0.9em;
50
+ padding: 3px;
51
+ margin: 0;
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ #content_message {
58
+ margin: 10px 15px;
59
+ font-style: italic;
60
+ color: #999999;
61
+ }
62
+
63
+ #message-bar {
64
+ min-height: 30px;
65
+ text-align: center;
66
+ padding-top: 10px;
67
+ }
@@ -0,0 +1,1004 @@
1
+ .swagger-ui-wrap {
2
+
3
+ line-height: 1;
4
+ font-family: "Droid Sans", sans-serif;
5
+ max-width: 960px;
6
+ margin-left: auto;
7
+ margin-right: auto;
8
+
9
+ b, strong {
10
+ font-family: "Droid Sans", sans-serif;
11
+ font-weight: bold;
12
+ }
13
+
14
+ q, blockquote {
15
+ quotes: none;
16
+ }
17
+
18
+ p {
19
+ line-height: 1.4em;
20
+ padding: 0 0 10px;
21
+ color: #333333;
22
+ }
23
+
24
+ q:before, q:after, blockquote:before, blockquote:after {
25
+ content: none;
26
+ }
27
+
28
+ .heading_with_menu {
29
+ h1, h2, h3, h4, h5, h6 {
30
+ display: block;
31
+ clear: none;
32
+ float: left;
33
+ -moz-box-sizing: border-box;
34
+ -webkit-box-sizing: border-box;
35
+ -ms-box-sizing: border-box;
36
+ box-sizing: border-box;
37
+ width: 60%;
38
+ }
39
+ }
40
+
41
+ table {
42
+ border-collapse: collapse;
43
+ border-spacing: 0;
44
+ thead {
45
+ tr {
46
+ th {
47
+ padding: 5px;
48
+ font-size: 0.9em;
49
+ color: #666666;
50
+ border-bottom: 1px solid #999999;
51
+ }
52
+ }
53
+ }
54
+ tbody {
55
+ tr:last-child {
56
+ td {
57
+ border-bottom: none;
58
+ }
59
+ }
60
+ tr.offset {
61
+ background-color: #f0f0f0;
62
+ }
63
+ tr {
64
+ td {
65
+ padding: 6px;
66
+ font-size: 0.9em;
67
+ border-bottom: 1px solid #cccccc;
68
+ vertical-align: top;
69
+ line-height: 1.3em;
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ ol {
76
+ margin: 0px 0 10px;
77
+ padding: 0 0 0 18px;
78
+ list-style-type: decimal;
79
+ li {
80
+ padding: 5px 0px;
81
+ font-size: 0.9em;
82
+ color: #333333;
83
+ }
84
+ }
85
+
86
+ ol, ul {
87
+ list-style: none;
88
+ }
89
+
90
+ h1, h2, h3, h4, h5, h6 {
91
+ a {
92
+ text-decoration: none;
93
+ }
94
+ a:hover {
95
+ text-decoration: underline;
96
+ }
97
+ span.divider {
98
+ color: #aaaaaa;
99
+ }
100
+ }
101
+
102
+ a {
103
+ color: #547f00;
104
+ img {
105
+ border: none;
106
+ }
107
+ }
108
+
109
+ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
110
+ display: block;
111
+ }
112
+
113
+ pre {
114
+ font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
115
+ background-color: #fcf6db;
116
+ border: 1px solid #e5e0c6;
117
+ padding: 10px;
118
+ code {
119
+ line-height: 1.6em;
120
+ background: none;
121
+ }
122
+ }
123
+
124
+ .content {
125
+ & > .content-type {
126
+ & > div {
127
+ & > label {
128
+ clear: both;
129
+ display: block;
130
+ color: #0F6AB4;
131
+ font-size: 1.1em;
132
+ margin: 0;
133
+ padding: 15px 0 5px;
134
+ }
135
+ }
136
+ }
137
+ pre {
138
+ font-size: 12px;
139
+ margin-top: 5px;
140
+ padding: 5px;
141
+ }
142
+ }
143
+
144
+ .icon-btn {
145
+ cursor: pointer;
146
+ }
147
+
148
+ .info_title {
149
+ padding-bottom: 10px;
150
+ font-weight: bold;
151
+ font-size: 25px;
152
+ }
153
+
154
+ p.big, div.big p {
155
+ font-size: 1em;
156
+ margin-bottom: 10px;
157
+ }
158
+
159
+ form.fullwidth ol {
160
+ li.string input, li.url input, li.text textarea, li.numeric input {
161
+ width: 500px !important;
162
+ }
163
+ }
164
+
165
+ .info_license {
166
+ padding-bottom: 5px;
167
+ }
168
+
169
+ .info_tos {
170
+ padding-bottom: 5px;
171
+ }
172
+
173
+ .message-fail {
174
+ color: #cc0000;
175
+ }
176
+
177
+ .info_contact {
178
+ padding-bottom: 5px;
179
+ }
180
+
181
+ .info_description {
182
+ padding-bottom: 10px;
183
+ font-size: 15px;
184
+ }
185
+
186
+ .markdown ol li, .markdown ul li {
187
+ padding: 3px 0px;
188
+ line-height: 1.4em;
189
+ color: #333333;
190
+ }
191
+
192
+ form.formtastic fieldset.inputs ol {
193
+ li.string input, li.url input, li.numeric input {
194
+ display: block;
195
+ padding: 4px;
196
+ width: auto;
197
+ clear: both;
198
+ }
199
+ li.string input.title,
200
+ li.url input.title,
201
+ li.numeric input.title {
202
+ font-size: 1.3em;
203
+ }
204
+ }
205
+
206
+ table.fullwidth {
207
+ width: 100%;
208
+ }
209
+
210
+ .model-signature {
211
+ font-family: "Droid Sans", sans-serif;
212
+ font-size: 1em;
213
+ line-height: 1.5em;
214
+ .signature-nav {
215
+ a {
216
+ text-decoration: none;
217
+ color: #AAA;
218
+ }
219
+ a:hover {
220
+ text-decoration: underline;
221
+ color: black;
222
+ }
223
+ .selected {
224
+ color: black;
225
+ text-decoration: none;
226
+ }
227
+ }
228
+ .propType {
229
+ color: #5555aa;
230
+ }
231
+ pre:hover {
232
+ background-color: #ffffdd;
233
+ }
234
+ pre {
235
+ font-size: .85em;
236
+ line-height: 1.2em;
237
+ overflow: auto;
238
+ max-height: 200px;
239
+ cursor: pointer;
240
+ }
241
+ ul.signature-nav {
242
+ display: block;
243
+ margin: 0;
244
+ padding: 0;
245
+ li:last-child {
246
+ padding-right: 0;
247
+ border-right: none;
248
+ }
249
+ li {
250
+ float: left;
251
+ margin: 0 5px 5px 0;
252
+ padding: 2px 5px 2px 0;
253
+ border-right: 1px solid #ddd;
254
+ }
255
+ }
256
+ .propOpt {
257
+ color: #555;
258
+ }
259
+ .snippet {
260
+ small {
261
+ font-size: 0.75em;
262
+ }
263
+ }
264
+ .propOptKey {
265
+ font-style: italic;
266
+ }
267
+ .description {
268
+ .strong {
269
+ font-weight: bold;
270
+ color: #000;
271
+ font-size: .9em;
272
+ }
273
+ div {
274
+ font-size: 0.9em;
275
+ line-height: 1.5em;
276
+ margin-left: 1em;
277
+ }
278
+ .stronger {
279
+ font-weight: bold;
280
+ color: #000;
281
+ }
282
+ }
283
+ .propName {
284
+ font-weight: bold;
285
+ }
286
+ .signature-container {
287
+ clear: both;
288
+ }
289
+ }
290
+
291
+ .body-textarea {
292
+ width: 300px;
293
+ height: 100px;
294
+ border: 1px solid #aaa;
295
+ }
296
+
297
+ .markdown p code, .markdown li code {
298
+ font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
299
+ background-color: #f0f0f0;
300
+ color: black;
301
+ padding: 1px 3px;
302
+ }
303
+
304
+ .required {
305
+ font-weight: bold;
306
+ }
307
+
308
+ input.parameter {
309
+ width: 300px;
310
+ border: 1px solid #aaa;
311
+ }
312
+
313
+ h1 {
314
+ color: black;
315
+ font-size: 1.5em;
316
+ line-height: 1.3em;
317
+ padding: 10px 0 10px 0;
318
+ font-family: "Droid Sans", sans-serif;
319
+ font-weight: bold;
320
+ }
321
+
322
+ .heading_with_menu {
323
+ float: none;
324
+ clear: both;
325
+ overflow: hidden;
326
+ display: block;
327
+ ul {
328
+ display: block;
329
+ clear: none;
330
+ float: right;
331
+ -moz-box-sizing: border-box;
332
+ -webkit-box-sizing: border-box;
333
+ -ms-box-sizing: border-box;
334
+ box-sizing: border-box;
335
+ margin-top: 10px;
336
+ }
337
+ }
338
+
339
+ h2 {
340
+ color: black;
341
+ font-size: 1.3em;
342
+ padding: 10px 0 10px 0;
343
+ a {
344
+ color: black;
345
+ }
346
+ span.sub {
347
+ font-size: 0.7em;
348
+ color: #999999;
349
+ font-style: italic;
350
+ a {
351
+ color: #777777;
352
+ }
353
+ }
354
+ }
355
+
356
+ span.weak {
357
+ color: #666666;
358
+ }
359
+
360
+ .message-success {
361
+ color: #89BF04;
362
+ }
363
+
364
+ caption, th, td {
365
+ text-align: left;
366
+ font-weight: normal;
367
+ vertical-align: middle;
368
+ }
369
+
370
+ .code {
371
+ font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
372
+ }
373
+
374
+ form.formtastic {
375
+ fieldset.inputs {
376
+ ol {
377
+ li.text {
378
+ textarea {
379
+ font-family: "Droid Sans", sans-serif;
380
+ height: 250px;
381
+ padding: 4px;
382
+ display: block;
383
+ clear: both;
384
+ }
385
+ }
386
+ li.select {
387
+ select {
388
+ display: block;
389
+ clear: both;
390
+ }
391
+ }
392
+ li.boolean {
393
+ float: none;
394
+ clear: both;
395
+ overflow: hidden;
396
+ display: block;
397
+ label {
398
+ display: block;
399
+ float: left;
400
+ clear: none;
401
+ margin: 0;
402
+ padding: 0;
403
+ }
404
+ input {
405
+ display: block;
406
+ float: left;
407
+ clear: none;
408
+ margin: 0 5px 0 0;
409
+ }
410
+ }
411
+ li.required {
412
+ label {
413
+ color: black;
414
+ }
415
+ }
416
+ li {
417
+ label {
418
+ display: block;
419
+ clear: both;
420
+ width: auto;
421
+ padding: 0 0 3px;
422
+ color: #666666;
423
+ abbr {
424
+ padding-left: 3px;
425
+ color: #888888;
426
+ }
427
+ }
428
+ p.inline-hints {
429
+ margin-left: 0;
430
+ font-style: italic;
431
+ font-size: 0.9em;
432
+ margin: 0;
433
+ }
434
+ }
435
+ }
436
+ }
437
+ fieldset.buttons {
438
+ margin: 0;
439
+ padding: 0;
440
+ }
441
+ }
442
+
443
+ span.blank, span.empty {
444
+ color: #888888;
445
+ font-style: italic;
446
+ }
447
+
448
+ .markdown {
449
+ h3 {
450
+ color: #547f00;
451
+ }
452
+ h4 {
453
+ color: #666666;
454
+ }
455
+ pre {
456
+ font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
457
+ background-color: #fcf6db;
458
+ border: 1px solid #e5e0c6;
459
+ padding: 10px;
460
+ margin: 0 0 10px 0;
461
+ code {
462
+ line-height: 1.6em;
463
+ }
464
+ }
465
+ }
466
+
467
+ div.gist {
468
+ margin: 20px 0 25px 0 !important;
469
+ }
470
+
471
+ ul#resources {
472
+ font-family: "Droid Sans", sans-serif;
473
+ font-size: 0.9em;
474
+
475
+ li.resource {
476
+ border-bottom: 1px solid #dddddd;
477
+
478
+ &:hover div.heading,
479
+ &.active div.heading {
480
+ h2 a {
481
+ color: black;
482
+ }
483
+ ul.options li a {
484
+ color: #555555;
485
+ }
486
+ }
487
+
488
+ &:last-child {
489
+ border-bottom: none;
490
+ }
491
+
492
+ div.heading {
493
+ border: 1px solid transparent;
494
+ float: none;
495
+ clear: both;
496
+ overflow: hidden;
497
+ display: block;
498
+ ul.options {
499
+ overflow: hidden;
500
+ padding: 0;
501
+ display: block;
502
+ clear: none;
503
+ float: right;
504
+ margin: 14px 10px 0 0;
505
+ li {
506
+ float: left;
507
+ clear: none;
508
+ margin: 0;
509
+ padding: 2px 10px;
510
+ border-right: 1px solid #dddddd;
511
+ color: #666666;
512
+ font-size: 0.9em;
513
+ a {
514
+ color: #aaaaaa;
515
+ text-decoration: none;
516
+ }
517
+ a:hover {
518
+ text-decoration: underline;
519
+ color: black;
520
+ }
521
+ }
522
+
523
+ li {
524
+ a:hover, a:active, a.active {
525
+ text-decoration: underline;
526
+ }
527
+
528
+ &:first-child,
529
+ &.first {
530
+ padding-left: 0;
531
+ }
532
+
533
+ &:last-child, &.last {
534
+ padding-right: 0;
535
+ border-right: none;
536
+ }
537
+ }
538
+ &:first-child, &.first {
539
+ padding-left: 0;
540
+ }
541
+ }
542
+ h2 {
543
+ color: #999999;
544
+ padding-left: 0;
545
+ display: block;
546
+ clear: none;
547
+ float: left;
548
+ font-family: "Droid Sans", sans-serif;
549
+ font-weight: bold;
550
+ a {
551
+ color: #999999;
552
+ }
553
+ a:hover {
554
+ color: black;
555
+ }
556
+ }
557
+ }
558
+ ul.endpoints {
559
+ li.endpoint {
560
+ ul.operations {
561
+ li.operation {
562
+ float: none;
563
+ clear: both;
564
+ overflow: hidden;
565
+ display: block;
566
+ margin: 0 0 10px;
567
+ padding: 0;
568
+ div.heading {
569
+ float: none;
570
+ clear: both;
571
+ overflow: hidden;
572
+ display: block;
573
+ margin: 0;
574
+ padding: 0;
575
+ h3 {
576
+ display: block;
577
+ clear: none;
578
+ float: left;
579
+ width: auto;
580
+ margin: 0;
581
+ padding: 0;
582
+ line-height: 1.1em;
583
+ color: black;
584
+ span.path {
585
+ padding-left: 10px;
586
+ a {
587
+ color: black;
588
+ text-decoration: none;
589
+ }
590
+ a:hover {
591
+ text-decoration: underline;
592
+ }
593
+ }
594
+ span.http_method {
595
+ a {
596
+ text-transform: uppercase;
597
+ text-decoration: none;
598
+ color: white;
599
+ display: inline-block;
600
+ width: 50px;
601
+ font-size: 0.7em;
602
+ text-align: center;
603
+ padding: 7px 0 4px;
604
+ -moz-border-radius: 2px;
605
+ -webkit-border-radius: 2px;
606
+ -o-border-radius: 2px;
607
+ -ms-border-radius: 2px;
608
+ -khtml-border-radius: 2px;
609
+ border-radius: 2px;
610
+ }
611
+ }
612
+ span {
613
+ margin: 0;
614
+ padding: 0;
615
+ }
616
+ }
617
+ ul.options {
618
+ overflow: hidden;
619
+ padding: 0;
620
+ display: block;
621
+ clear: none;
622
+ float: right;
623
+ margin: 6px 10px 0 0;
624
+ li {
625
+ float: left;
626
+ clear: none;
627
+ margin: 0;
628
+ padding: 2px 10px;
629
+ font-size: 0.9em;
630
+ a {
631
+ text-decoration: none;
632
+ }
633
+ }
634
+ }
635
+ }
636
+ div.content {
637
+ border-top: none;
638
+ padding: 10px;
639
+ -moz-border-radius-bottomleft: 6px;
640
+ -webkit-border-bottom-left-radius: 6px;
641
+ -o-border-bottom-left-radius: 6px;
642
+ -ms-border-bottom-left-radius: 6px;
643
+ -khtml-border-bottom-left-radius: 6px;
644
+ border-bottom-left-radius: 6px;
645
+ -moz-border-radius-bottomright: 6px;
646
+ -webkit-border-bottom-right-radius: 6px;
647
+ -o-border-bottom-right-radius: 6px;
648
+ -ms-border-bottom-right-radius: 6px;
649
+ -khtml-border-bottom-right-radius: 6px;
650
+ border-bottom-right-radius: 6px;
651
+ margin: 0 0 20px;
652
+ h4 {
653
+ font-size: 1.1em;
654
+ margin: 0;
655
+ padding: 15px 0 5px;
656
+ }
657
+ div.sandbox_header {
658
+ float: none;
659
+ clear: both;
660
+ overflow: hidden;
661
+ display: block;
662
+ a {
663
+ padding: 4px 0 0 10px;
664
+ display: inline-block;
665
+ font-size: 0.9em;
666
+ }
667
+ img {
668
+ display: block;
669
+ clear: none;
670
+ float: right;
671
+ }
672
+ input.submit {
673
+ display: block;
674
+ clear: none;
675
+ float: left;
676
+ padding: 6px 8px;
677
+ }
678
+ }
679
+ form {
680
+ input[type='text'].error {
681
+ outline: 2px solid black;
682
+ outline-color: #cc0000;
683
+ }
684
+ }
685
+ div.response {
686
+ div.block {
687
+ pre {
688
+ font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
689
+ padding: 10px;
690
+ font-size: 0.9em;
691
+ max-height: 400px;
692
+ overflow-y: auto;
693
+ }
694
+ }
695
+ }
696
+ }
697
+ }
698
+ li.operation.put {
699
+ div.heading {
700
+ background-color: #f9f2e9;
701
+ border: 1px solid #f0e0ca;
702
+ h3 {
703
+ span.http_method {
704
+ a {
705
+ background-color: #c5862b;
706
+ }
707
+ }
708
+ }
709
+ ul.options {
710
+ li {
711
+ border-right: 1px solid #dddddd;
712
+ border-right-color: #f0e0ca;
713
+ color: #c5862b;
714
+ a {
715
+ color: #c5862b;
716
+ }
717
+ }
718
+ }
719
+ }
720
+ div.content {
721
+ background-color: #faf5ee;
722
+ border: 1px solid #f0e0ca;
723
+ h4 {
724
+ color: #c5862b;
725
+ }
726
+ div.sandbox_header {
727
+ a {
728
+ color: #dcb67f;
729
+
730
+ }
731
+ }
732
+ }
733
+ }
734
+ li.operation.head {
735
+ div.heading {
736
+ background-color: #fcffcd;
737
+ border: 1px solid black;
738
+ border-color: #ffd20f;
739
+ h3 {
740
+ span.http_method {
741
+ a {
742
+ text-transform: uppercase;
743
+ background-color: #ffd20f;
744
+ }
745
+ }
746
+ }
747
+ ul.options {
748
+ li {
749
+ border-right: 1px solid #dddddd;
750
+ border-right-color: #ffd20f;
751
+ color: #ffd20f;
752
+ a {
753
+ color: #ffd20f;
754
+ }
755
+ }
756
+ }
757
+ }
758
+ div.content {
759
+ background-color: #fcffcd;
760
+ border: 1px solid black;
761
+ border-color: #ffd20f;
762
+ h4 {
763
+ color: #ffd20f;
764
+ }
765
+ div.sandbox_header {
766
+ a {
767
+ color: #6fc992;
768
+ }
769
+ }
770
+ }
771
+ }
772
+ li.operation.delete {
773
+ div.heading {
774
+ background-color: #f5e8e8;
775
+ border: 1px solid #e8c6c7;
776
+ h3 {
777
+ span.http_method {
778
+ a {
779
+ text-transform: uppercase;
780
+ background-color: #a41e22;
781
+
782
+ }
783
+ }
784
+ }
785
+ ul.options {
786
+ li {
787
+ border-right: 1px solid #dddddd;
788
+ border-right-color: #e8c6c7;
789
+ color: #a41e22;
790
+ a {
791
+ color: #a41e22;
792
+ }
793
+ }
794
+ }
795
+ }
796
+ div.content {
797
+ background-color: #f7eded;
798
+ border: 1px solid #e8c6c7;
799
+ h4 {
800
+ color: #a41e22;
801
+ }
802
+ div.sandbox_header {
803
+ a {
804
+ color: #c8787a;
805
+ }
806
+ }
807
+ }
808
+ }
809
+ li.operation.post {
810
+ div.heading {
811
+ background-color: #e7f6ec;
812
+ border: 1px solid #c3e8d1;
813
+ h3 {
814
+ span.http_method {
815
+ a {
816
+ background-color: #10a54a;
817
+ }
818
+ }
819
+ }
820
+ ul.options {
821
+ li {
822
+ border-right: 1px solid #dddddd;
823
+ border-right-color: #c3e8d1;
824
+ color: #10a54a;
825
+ a {
826
+ color: #10a54a;
827
+ }
828
+ }
829
+ }
830
+ }
831
+ div.content {
832
+ background-color: #ebf7f0;
833
+ border: 1px solid #c3e8d1;
834
+ h4 {
835
+ color: #10a54a;
836
+ }
837
+ div.sandbox_header {
838
+ a {
839
+ color: #6fc992;
840
+ }
841
+ }
842
+ }
843
+ }
844
+ li.operation.patch {
845
+ div.heading {
846
+ background-color: #FCE9E3;
847
+ border: 1px solid #F5D5C3;
848
+ h3 {
849
+ span.http_method {
850
+ a {
851
+ background-color: #D38042;
852
+
853
+ }
854
+ }
855
+ }
856
+ ul.options {
857
+ li {
858
+ border-right: 1px solid #dddddd;
859
+ border-right-color: #f0cecb;
860
+ color: #D38042;
861
+ a {
862
+ color: #D38042;
863
+ }
864
+ }
865
+ }
866
+ }
867
+ div.content {
868
+ background-color: #faf0ef;
869
+ border: 1px solid #f0cecb;
870
+
871
+ h4 {
872
+ color: #D38042;
873
+
874
+ }
875
+ div.sandbox_header {
876
+ a {
877
+ color: #dcb67f;
878
+ }
879
+ }
880
+ }
881
+ }
882
+ li.operation.get {
883
+ div.heading {
884
+ background-color: #e7f0f7;
885
+ border: 1px solid #c3d9ec;
886
+ h3 {
887
+ span.http_method {
888
+ a {
889
+ background-color: #0f6ab4;
890
+ }
891
+ }
892
+ }
893
+ ul.options {
894
+ li {
895
+ border-right: 1px solid #dddddd;
896
+ border-right-color: #c3d9ec;
897
+ color: #0f6ab4;
898
+ a {
899
+ color: #0f6ab4;
900
+ }
901
+ }
902
+ }
903
+ }
904
+ div.content {
905
+ background-color: #ebf3f9;
906
+ border: 1px solid #c3d9ec;
907
+ h4 {
908
+ color: #0f6ab4;
909
+ }
910
+ div.sandbox_header {
911
+ a {
912
+ color: #6fa5d2;
913
+ }
914
+ }
915
+ }
916
+ }
917
+ li.operation {
918
+ &.get, &.post, &.head, &.put, &.patch, &.delete {
919
+ div.content {
920
+ border-top: none;
921
+ }
922
+ div.heading ul.options li {
923
+ &:last-child, &.last {
924
+ padding-right: 0;
925
+ border-right: none;
926
+ }
927
+ }
928
+ }
929
+ }
930
+ ul.options li {
931
+ a:hover, a:active, a.active {
932
+ text-decoration: underline;
933
+ }
934
+
935
+ &:first-child,
936
+ &.first {
937
+ padding-left: 0;
938
+ }
939
+
940
+ }
941
+ &:first-child, &.first {
942
+ padding-left: 0;
943
+ }
944
+ }
945
+ }
946
+ }
947
+ }
948
+ }
949
+
950
+ p#colophon {
951
+ margin: 0 15px 40px 15px;
952
+ padding: 10px 0;
953
+ font-size: 0.8em;
954
+ border-top: 1px solid #dddddd;
955
+ font-family: "Droid Sans", sans-serif;
956
+ color: #999999;
957
+ font-style: italic;
958
+ a {
959
+ text-decoration: none;
960
+ color: #547f00;
961
+ }
962
+ }
963
+
964
+ h3 {
965
+ color: black;
966
+ font-size: 1.1em;
967
+ padding: 10px 0 10px 0;
968
+ }
969
+
970
+ .markdown ol, .markdown ul {
971
+ font-family: "Droid Sans", sans-serif;
972
+ margin: 5px 0 10px;
973
+ padding: 0 0 0 18px;
974
+ list-style-type: disc;
975
+ }
976
+
977
+ form.form_box {
978
+ background-color: #ebf3f9;
979
+ border: 1px solid #c3d9ec;
980
+ padding: 10px;
981
+ label {
982
+ color: #0f6ab4 !important;
983
+ }
984
+ input[type=submit] {
985
+ display: block;
986
+ padding: 10px;
987
+ }
988
+ p.weak {
989
+ font-size: 0.8em;
990
+ }
991
+ p {
992
+ font-size: 0.9em;
993
+ padding: 0 0 15px;
994
+ color: #7e7b6d;
995
+ a {
996
+ color: #646257;
997
+ }
998
+ strong {
999
+ color: black;
1000
+ }
1001
+ }
1002
+ }
1003
+
1004
+ }