/
docs.js
300 lines (235 loc) · 10.1 KB
/
docs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
(function() {
// Storing common selections
var allEndpoints = $('li.endpoint'),
allEndpointsLength = allEndpoints.length,
allMethodLists = $('ul.methods'),
allMethodListsLength = allMethodLists.length;
function listMethods(context) {
var methodsList = $('ul.methods', context || null);
for (var i = 0, len = methodsList.length; i < len; i++) {
$(methodsList[i]).slideDown();
}
}
// Toggle show/hide of method details, form, and results
$('li.method > div.title').click(function() {
$('form', this.parentNode).slideToggle();
})
// Toggle an endpoint
$('li.endpoint > h3.title span.name').click(function() {
$('ul.methods', this.parentNode.parentNode).slideToggle();
$(this.parentNode.parentNode).toggleClass('expanded')
})
// Toggle all endpoints
$('#toggle-endpoints').click(function(event) {
event.preventDefault();
// Check for collapsed endpoints (hidden methods)
var endpoints = $('ul.methods:not(:visible)'),
endpointsLength = endpoints.length;
if (endpointsLength > 0) {
// Some endpoints are collapsed, expand them.
for (var x = 0; x < endpointsLength; x++) {
var methodsList = $(endpoints[x]);
methodsList.slideDown();
methodsList.parent().toggleClass('expanded', true)
}
} else {
// All endpoints are expanded, collapse them
var endpoints = $('ul.methods'),
endpointsLength = endpoints.length;
for (var x = 0; x < endpointsLength; x++) {
var methodsList = $(endpoints[x]);
methodsList.slideUp();
methodsList.parent().toggleClass('expanded', false)
}
}
})
// Toggle all methods
$('#toggle-methods').click(function(event) {
event.preventDefault();
var methodForms = $('ul.methods form:not(:visible)'), // Any hidden method forms
methodFormsLength = methodForms.length;
// Check if any method is not visible. If so, expand all methods.
if (methodFormsLength > 0) {
var methodLists = $('ul.methods:not(:visible)'), // Any hidden methods
methodListsLength = methodLists.length;
// First make sure all the hidden endpoints are expanded.
for (var x = 0; x < methodListsLength; x++) {
$(methodLists[x]).slideDown();
}
// Now make sure all the hidden methods are expanded.
for (var y = 0; y < methodFormsLength; y++) {
$(methodForms[y]).slideDown();
}
} else {
// Hide all visible method forms
var visibleMethodForms = $('ul.methods form:visible'),
visibleMethodFormsLength = visibleMethodForms.length;
for (var i = 0; i < visibleMethodFormsLength; i++) {
$(visibleMethodForms[i]).slideUp();
}
}
for (var z = 0; z < allEndpointsLength; z++) {
$(allEndpoints[z]).toggleClass('expanded', true);
}
})
// List methods for a particular endpoint.
// Hide all forms if visible
$('li.list-methods a').click(function(event) {
event.preventDefault();
// Make sure endpoint is expanded
var endpoint = $(this).closest('li.endpoint'),
methods = $('li.method form', endpoint);
listMethods(endpoint);
// Make sure all method forms are collapsed
var visibleMethods = $.grep(methods, function(method) {
return $(method).is(':visible')
})
$(visibleMethods).each(function(i, method) {
$(method).slideUp();
})
$(endpoint).toggleClass('expanded', true);
})
// Expand methods for a particular endpoint.
// Show all forms and list all methods
$('li.expand-methods a').click(function(event) {
event.preventDefault();
// Make sure endpoint is expanded
var endpoint = $(this).closest('li.endpoint'),
methods = $('li.method form', endpoint);
listMethods(endpoint);
// Make sure all method forms are expanded
var hiddenMethods = $.grep(methods, function(method) {
return $(method).not(':visible')
})
$(hiddenMethods).each(function(i, method) {
$(method).slideDown();
})
$(endpoint).toggleClass('expanded', true);
});
// Toggle headers section
$('div.headers h4').click(function(event) {
event.preventDefault();
$(this.parentNode).toggleClass('expanded');
$('div.fields', this.parentNode).slideToggle();
});
// Auth with OAuth
$('#credentials').submit(function(event) {
event.preventDefault();
var params = $(this).serializeArray();
$.post('/auth', params, function(result) {
if (result.signin) {
window.open(result.signin,"_blank","height=900,width=800,menubar=0,resizable=1,scrollbars=1,status=0,titlebar=0,toolbar=0");
}
})
});
/*
Try it! button. Submits the method params, apikey and secret if any, and apiName
*/
$('li.method form').submit(function(event) {
var self = this;
event.preventDefault();
var params = $(this).serializeArray(),
apiKey = { name: 'apiKey', value: $('input[name=key]').val() },
apiSecret = { name: 'apiSecret', value: $('input[name=secret]').val() },
apiName = { name: 'apiName', value: $('input[name=apiName]').val() };
params.push(apiKey, apiSecret, apiName);
// Setup results container
var resultContainer = $('.result', self);
if (resultContainer.length === 0) {
resultContainer = $(document.createElement('div')).attr('class', 'result');
$(self).append(resultContainer);
}
if ($('pre.response', resultContainer).length === 0) {
// Clear results link
var clearLink = $(document.createElement('a'))
.text('Clear results')
.addClass('clear-results')
.attr('href', '#')
.click(function(e) {
e.preventDefault();
var thislink = this;
$('.result', self)
.slideUp(function() {
$(this).remove();
$(thislink).remove();
});
})
.insertAfter($('input[type=submit]', self));
// Call that was made, add pre elements
resultContainer.append($(document.createElement('h4')).text('Call'));
resultContainer.append($(document.createElement('pre')).addClass('call'));
// Code
resultContainer.append($(document.createElement('h4')).text('Response Code'));
resultContainer.append($(document.createElement('pre')).addClass('code prettyprint'));
// Header
resultContainer.append($(document.createElement('h4')).text('Response Headers'));
resultContainer.append($(document.createElement('pre')).addClass('headers prettyprint'));
// Response
resultContainer.append($(document.createElement('h4'))
.text('Response Body')
.append($(document.createElement('a'))
.text('Select body')
.addClass('select-all')
.attr('href', '#')
.click(function(e) {
e.preventDefault();
selectElementText($(this.parentNode).siblings('.response')[0]);
})
)
);
resultContainer.append($(document.createElement('pre'))
.addClass('response prettyprint'));
}
console.log(params);
$.post('/processReq', params, function(result, text) {
// If we get passed a signin property, open a window to allow the user to signin/link their account
if (result.signin) {
window.open(result.signin,"_blank","height=900,width=800,menubar=0,resizable=1,scrollbars=1,status=0,titlebar=0,toolbar=0");
} else {
var response,
responseContentType = result.headers['content-type'];
// Format output according to content-type
response = livedocs.formatData(result.response, result.headers['content-type'])
$('pre.response', resultContainer)
.toggleClass('error', false)
.text(response);
}
})
// Complete, runs on error and success
.complete(function(result, text) {
var response = JSON.parse(result.responseText);
if (response.call) {
$('pre.call', resultContainer)
.text(response.call);
}
if (response.code) {
$('pre.code', resultContainer)
.text(response.code);
}
if (response.headers) {
$('pre.headers', resultContainer)
.text(formatJSON(response.headers));
}
// Syntax highlighting
prettyPrint();
})
.error(function(err, text) {
var response;
if (err.responseText !== '') {
var result = JSON.parse(err.responseText),
headers = formatJSON(result.headers);
if (result.headers && result.headers['content-type']) {
// Format the result.response and assign it to response
response = livedocs.formatData(result.response, result.headers['content-type']);
} else {
response = result.response;
}
} else {
response = 'Error';
}
$('pre.response', resultContainer)
.toggleClass('error', true)
.text(response);
})
})
})();