mirror of
https://github.com/Febbweiss/CloudBudget.git
synced 2026-03-05 06:45:39 +00:00
Feature: add API documentation
This commit is contained in:
158
public/utils/send_sample_request.js
Executable file
158
public/utils/send_sample_request.js
Executable file
@@ -0,0 +1,158 @@
|
||||
define([
|
||||
'jquery'
|
||||
], function($) {
|
||||
|
||||
var initDynamic = function() {
|
||||
// Button send
|
||||
$(".sample-request-send").off("click");
|
||||
$(".sample-request-send").on("click", function(e) {
|
||||
e.preventDefault();
|
||||
var $root = $(this).parents("article");
|
||||
var group = $root.data("group");
|
||||
var name = $root.data("name");
|
||||
var version = $root.data("version");
|
||||
sendSampleRequest(group, name, version, $(this).data("sample-request-type"));
|
||||
});
|
||||
|
||||
// Button clear
|
||||
$(".sample-request-clear").off("click");
|
||||
$(".sample-request-clear").on("click", function(e) {
|
||||
e.preventDefault();
|
||||
var $root = $(this).parents("article");
|
||||
var group = $root.data("group");
|
||||
var name = $root.data("name");
|
||||
var version = $root.data("version");
|
||||
clearSampleRequest(group, name, version);
|
||||
});
|
||||
}; // initDynamic
|
||||
|
||||
function sendSampleRequest(group, name, version, type)
|
||||
{
|
||||
var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');
|
||||
|
||||
// Optional header
|
||||
var header = {};
|
||||
$root.find(".sample-request-header:checked").each(function(i, element) {
|
||||
var group = $(element).data("sample-request-header-group-id");
|
||||
$root.find("[data-sample-request-header-group=\"" + group + "\"]").each(function(i, element) {
|
||||
var key = $(element).data("sample-request-header-name");
|
||||
var value = element.value;
|
||||
header[key] = $.type(value) === "string" ? escapeHtml(value) : value;
|
||||
});
|
||||
});
|
||||
|
||||
// create JSON dictionary of parameters
|
||||
var param = {};
|
||||
$root.find(".sample-request-param:checked").each(function(i, element) {
|
||||
var group = $(element).data("sample-request-param-group-id");
|
||||
$root.find("[data-sample-request-param-group=\"" + group + "\"]").each(function(i, element) {
|
||||
var key = $(element).data("sample-request-param-name");
|
||||
var value = element.value;
|
||||
param[key] = $.type(value) === "string" ? escapeHtml(value) : value;
|
||||
});
|
||||
});
|
||||
|
||||
// grab user-inputted URL
|
||||
var url = $root.find(".sample-request-url").val();
|
||||
|
||||
// Insert url parameter
|
||||
var pattern = pathToRegexp(url, null);
|
||||
var matches = pattern.exec(url);
|
||||
for (var i = 1; i < matches.length; i++) {
|
||||
var key = matches[i].substr(1);
|
||||
if (param[key] !== undefined) {
|
||||
url = url.replace(matches[i], encodeURIComponent(param[key]));
|
||||
|
||||
// remove URL parameters from list
|
||||
delete param[key];
|
||||
}
|
||||
} // for
|
||||
|
||||
// send AJAX request, catch success or error callback
|
||||
$.ajax({
|
||||
url: url,
|
||||
dataType: "json",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify(param),
|
||||
headers: header,
|
||||
type: type.toUpperCase(),
|
||||
success: displaySuccess,
|
||||
error: displayError
|
||||
});
|
||||
|
||||
function displaySuccess(data) {
|
||||
var jsonResponse;
|
||||
try {
|
||||
jsonResponse = JSON.stringify(data, null, 4);
|
||||
} catch (e) {
|
||||
jsonResponse = data;
|
||||
}
|
||||
$root.find(".sample-request-response").fadeTo(250, 1);
|
||||
$root.find(".sample-request-response-json").html(jsonResponse);
|
||||
refreshScrollSpy();
|
||||
};
|
||||
|
||||
function displayError(jqXHR, textStatus, error) {
|
||||
var message = "Error " + jqXHR.status + ": " + error;
|
||||
var jsonResponse;
|
||||
try {
|
||||
jsonResponse = JSON.parse(jqXHR.responseText);
|
||||
jsonResponse = JSON.stringify(jsonResponse, null, 4);
|
||||
} catch (e) {
|
||||
jsonResponse = jqXHR.responseText;
|
||||
}
|
||||
|
||||
if (jsonResponse)
|
||||
message += "<br>" + jsonResponse;
|
||||
|
||||
// flicker on previous error to make clear that there is a new response
|
||||
if($root.find(".sample-request-response").is(":visible"))
|
||||
$root.find(".sample-request-response").fadeTo(1, 0.1);
|
||||
|
||||
$root.find(".sample-request-response").fadeTo(250, 1);
|
||||
$root.find(".sample-request-response-json").html(message);
|
||||
refreshScrollSpy();
|
||||
};
|
||||
}
|
||||
|
||||
function clearSampleRequest(group, name, version)
|
||||
{
|
||||
var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');
|
||||
|
||||
// hide sample response
|
||||
$root.find(".sample-request-response-json").html("");
|
||||
$root.find(".sample-request-response").hide();
|
||||
|
||||
// reset value of parameters
|
||||
$root.find(".sample-request-param").each(function(i, element) {
|
||||
element.value = "";
|
||||
});
|
||||
|
||||
// restore default URL
|
||||
var $urlElement = $root.find(".sample-request-url");
|
||||
$urlElement.val($urlElement.prop("defaultValue"));
|
||||
|
||||
refreshScrollSpy();
|
||||
}
|
||||
|
||||
function refreshScrollSpy()
|
||||
{
|
||||
$('[data-spy="scroll"]').each(function () {
|
||||
$(this).scrollspy("refresh");
|
||||
});
|
||||
}
|
||||
|
||||
function escapeHtml(str) {
|
||||
var div = document.createElement("div");
|
||||
div.appendChild(document.createTextNode(str));
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exports.
|
||||
*/
|
||||
return {
|
||||
initDynamic: initDynamic
|
||||
};
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user