lib/lurker/templates/javascripts/lurker.js
(function() {
var $ = window.jQuery;
var hljs = window.hljs;
var Lurker = {
disableSubmitButton: function() {
$("#submit-api").attr("disabled", true);
},
enableSubmitButton: function() {
$("#submit-api").attr("disabled", false);
},
fillInInfoTab: function($tab, xhr) {
$tab.find('.status td.value').text(xhr.status + " " + xhr.statusText);
$tab.find('#headers').text(xhr.getAllResponseHeaders());
var realTimeTaken = Lurker.lastRequest.endTime - Lurker.lastRequest.startTime;
$tab.find('.time td.value').text(realTimeTaken + " ms");
},
fillInRawTab: function($tab, xhr) {
var content;
switch (Lurker.detectContentType(xhr)) {
case "json":
var json = JSON.stringify(JSON.parse(xhr.responseText), null, 2);
content = hljs.highlightAuto(json).value;
break;
default:
content = xhr.responseText;
}
$tab.html(content);
},
detectContentType: function(response) {
var contentType = response.getResponseHeader("Content-Type");
var detectedContentType = null;
if (contentType.match(/application\/json/)) {
detectedContentType = 'json';
}
return detectedContentType;
},
buildActionUrl: function(host, template, values) {
for (var i = 0; i < values.length; i++) {
var placeholder = new RegExp(':' + values[i].label);
template = template.replace(placeholder, encodeURIComponent(values[i].value));
}
return host + template;
},
serializePayload: function(payload, contentType) {
if (contentType === 'application/json' || /\+json$/.test(contentType)) {
return JSON.stringify(payload);
} else {
// default to 'application/x-www-form-urlencoded'
return jQuery.param(payload);
}
},
generateCurlCommand: function(targetUrl, method, payload, contentType) {
var serializedPayload = Lurker.serializePayload(payload, contentType);
var results = [];
results.push('curl');
results.push('-X ' + method);
if (serializedPayload.length > 0) {
if (contentType != 'application/x-www-form-urlencoded') {
results.push("-H 'Content-Type: " + contentType + "'");
}
results.push("-d '" + serializedPayload + "'");
}
results.push("'" + targetUrl + "'");
return results.join(' ');
},
performRequest: function(host, method, template, values, payload, contentType) {
Lurker.disableSubmitButton();
$.ajax({
url: Lurker.buildActionUrl(host, template, values),
data: Lurker.serializePayload(payload, contentType),
method: method,
contentType: contentType,
processData: false
}).complete(Lurker.onComplete);
Lurker.lastRequest = {};
Lurker.lastRequest.startTime = Date.now();
return false;
},
onComplete: function(xhr) {
Lurker.lastRequest.endTime = Date.now();
Lurker.enableSubmitButton();
var $responseDiv = $("#show-api-response-div");
$responseDiv.find("[ref^='response']").hide();
Lurker.fillInInfoTab($responseDiv.showNavTab("info"), xhr);
Lurker.fillInRawTab($responseDiv.showNavTab("raw"), xhr);
}
};
window.Lurker = Lurker;
$(function($) {
var activeMenuItem = $('#side-menu').find('a[href="' + window.location.pathname + '"]');
if (activeMenuItem.length === 1) {
activeMenuItem.addClass('hovered')
.parents('.collapse').addClass('in')
.parents('.endpoint-group').addClass('active');
}
window.domain = window.localStorage.lastDomain || '/';
window.domainName = window.localStorage.lastDomainName || 'Local';
function currentDomain(domain, domainName) {
$('.domains').find('.current')
.text(domainName)
.data('domain', domain);
}
$('.domains .domain').click(function() {
window.domain = window.localStorage.lastDomain = $(this).data('domain');
window.domainName = window.localStorage.lastDomainName = $(this).text() + " (" + window.domain + ")";
currentDomain(window.domain, window.domainName);
});
$('.domains .current.btn').click(function() {
window.location = $(this).data('domain');
});
currentDomain(window.domain, window.domainName);
});
$.fn.extend({
showNavTab: function(name) {
return $(this).find("[ref=response-" + name + "]").show();
}
});
})();