app/assets/javascripts/api_taster/app.js in api_taster-0.5.1 vs app/assets/javascripts/api_taster/app.js in api_taster-0.6.0
- old
+ new
@@ -1,148 +1,158 @@
var ApiTaster = {
- formAction: '',
+ disableSubmitButton: function() {
+ $("#submit-api").attr("disabled", true);
+ },
- disableSubmitButton: function() {
- $("#submit-api").attr("disabled", true);
- },
+ enableSubmitButton: function() {
+ $("#submit-api").attr("disabled", false);
+ },
- enableSubmitButton: function() {
- $("#submit-api").attr("disabled", false);
- },
+ disableUrlParams: function() {
+ $("fieldset[ref=url-params] input").prop("disabled", true);
+ },
- disableUrlParams: function() {
- $("fieldset[ref=url-params] input").prop("disabled", true);
- },
+ enableUrlParams: function() {
+ $("fieldset[ref=url-params] input").prop("disabled", false);
+ },
- enableUrlParams: function() {
- $("fieldset[ref=url-params] input").prop("disabled", false);
- },
+ detectContentType: function(response) {
+ var contentType = response.getResponseHeader("Content-Type");
+ var detectedContentType = null
- storeFormActionFor: function(form) {
- ApiTaster.formAction = form.attr("action")
- },
+ if (contentType.match(/application\/json/)) {
+ detectedContentType = 'json';
+ }
- restoreFormActionFor: function(form) {
- $(form).attr("action", ApiTaster.formAction);
- },
+ return detectedContentType;
+ },
- detectContentType: function(response) {
- var contentType = response.getResponseHeader("Content-Type");
- var detectedContentType = null
+ fillInInfoTab: function($tab, xhr) {
+ $tab.find('.status td.value').text(xhr.status + " " + xhr.statusText);
+ $tab.find('.headers td.value').text(xhr.getAllResponseHeaders());
- if (contentType.match(/application\/json/)) {
- detectedContentType = 'json';
- }
+ timeTaken = ApiTaster.lastRequest.endTime - ApiTaster.lastRequest.startTime
+ $tab.find('.time td.value').text(timeTaken + " ms");
+ },
- return detectedContentType;
- }
+ getSubmitUrl: function($form) {
+ var baseUrl = $form.attr('action');
+ var matches = baseUrl.match(/\:[^\/]+/g)
-};
+ if (matches) {
+ for(var a = 0; a < matches.length; a++) {
+ var match = matches[a];
+ var str = match.substr(1);
-$.fn.extend({
+ var $input = $form.find(
+ 'input[name="' + str + '"],input[name="[api_taster_url_params]' + str + '"]'
+ );
- replaceUrlParams: function(params) {
- var form = this;
+ if ($input.length > 0) {
+ baseUrl = baseUrl.replace(match, $input.val());
+ }
+ }
+ }
- ApiTaster.storeFormActionFor(form);
+ return baseUrl;
+ }
- var formAction = form.attr("action");
+};
- $.each(params, function(i, param) {
- var matches = param["name"].match(/\[api_taster_url_params\](.*)/)
- if (matches) {
- var paramKey = matches[1];
- var paramValue = param["value"];
- var regex = new RegExp(":" + paramKey);
+$.fn.extend({
- formAction = formAction.replace(regex, paramValue);
- }
- });
+ enableNavTabsFor: function(contentElement) {
+ var $container = $(this);
- form.attr("action", formAction);
- },
+ $container.find("ul.nav-tabs a").click(function() {
+ $link = $(this);
+ $li = $link.parent();
- enableNavTabsFor: function(contentElement) {
- var container = this;
+ $li.addClass("active").siblings().removeClass("active");
- $("ul.nav-tabs a", container).click(function(e) {
- e.preventDefault();
+ $container.find(contentElement).hide();
+ $container.find(contentElement + "[ref=" + $link.attr("id") + "]").show();
+ return false;
+ });
+ },
- $(this).parent().siblings().removeClass("active");
- $(this).parent().addClass("active");
+ showNavTab: function(name) {
+ $response = $(this);
+ $response.find("ul.nav-tabs li").removeClass("active");
+ $response.find("ul.nav-tabs li a#response-" + name).parent().show().addClass("active");
- $(contentElement, container).hide();
- $(contentElement + "[ref=" + $(this).attr("id") + "]", container).show();
- });
- },
+ $response.find("pre").hide();
- showNavTab: function(name) {
- $("ul.nav-tabs li", this).removeClass("active");
- $("ul.nav-tabs li a#response-" + name, this).parent().show().addClass("active");
+ return $response.find("pre[ref=response-" + name + "]").show();
+ },
- $("pre", this).hide();
+ displayOnlySelectedParamsFieldset: function() {
+ $("fieldset", this).hide();
+ $("fieldset[ref=" + $("ul.nav-tabs li.active a").attr("id") + "]", this).show();
+ }
- return $("pre[ref=response-" + name + "]", this).show();
- },
-
- displayOnlySelectedParamsFieldset: function() {
- $("fieldset", this).hide();
- $("fieldset[ref=" + $("ul.nav-tabs li.active a").attr("id") + "]", this).show();
- }
-
});
jQuery(function($) {
- $("#list-api-div a").click(function(e) {
- e.preventDefault();
+ $("#list-api-div a").click(function(e) {
+ e.preventDefault();
- $(this).parent().siblings().removeClass("active");
- $(this).parent().addClass("active");
+ $(this).parent().siblings().removeClass("active");
+ $(this).parent().addClass("active");
- $("#show-api-div .div-container").load(this.href, function() {
- prettyPrint();
+ $("#show-api-div .div-container").load(this.href, function() {
+ prettyPrint();
- $("#show-api-div form").enableNavTabsFor("fieldset");
- $("#show-api-div form").displayOnlySelectedParamsFieldset();
- });
- });
+ $("#show-api-div form").enableNavTabsFor("fieldset");
+ $("#show-api-div form").displayOnlySelectedParamsFieldset();
- $("#show-api-div").on("click", "#submit-api", function() {
- $(this).parents("form").submit(function() {
- ApiTaster.disableSubmitButton();
+ $("#show-api-div form").submit(onSubmit);
+ $("#show-api-response-div").enableNavTabsFor("pre");
+ });
+ });
- $(this).unbind("submit").ajaxSubmit({
- beforeSubmit: function(arr, $form, options) {
- $form.replaceUrlParams(arr);
- ApiTaster.disableUrlParams();
- return false;
- }
- });
- });
+ function onSubmit(e) {
+ $form = $(e.target);
+ ApiTaster.disableSubmitButton();
+ ApiTaster.disableUrlParams();
- $("form").bind("ajax:complete", function(e, xhr, status) {
- ApiTaster.enableSubmitButton();
- ApiTaster.enableUrlParams();
- ApiTaster.restoreFormActionFor(this);
+ window.ajax = $.ajax({
+ url: ApiTaster.getSubmitUrl($form),
+ type: $form.attr('method'),
+ data: $form.serialize(),
+ dataType: 'xml'
+ }).complete(onComplete);
- if ($("#show-api-response-div:visible").length == 0) {
- $("#show-api-response-div").slideDown(100);
- }
+ ApiTaster.lastRequest = {};
+ ApiTaster.lastRequest.startTime = Date.now();
- switch (ApiTaster.detectContentType(xhr)) {
- case "json":
- $("#show-api-response-div").showNavTab("json").text(
- JSON.stringify(JSON.parse(xhr.responseText), null, 2)
- );
- break;
- }
+ return false;
+ }
- $("#show-api-response-div pre[ref=response-raw]").text(xhr.responseText);
+ function onComplete(xhr, status) {
+ ApiTaster.lastRequest.endTime = Date.now();
+ ApiTaster.enableSubmitButton();
+ ApiTaster.enableUrlParams();
- prettyPrint();
- });
+ if ($("#show-api-response-div:visible").length == 0) {
+ $("#show-api-response-div").slideDown(100);
+ }
- $("#show-api-response-div").enableNavTabsFor("pre");
- });
-});
+ ApiTaster.fillInInfoTab(
+ $("#show-api-response-div").showNavTab("info"),
+ xhr
+ );
+ switch (ApiTaster.detectContentType(xhr)) {
+ case "json":
+ $("#show-api-response-div").showNavTab("json").text(
+ JSON.stringify(JSON.parse(xhr.responseText), null, 2)
+ );
+ break;
+ }
+
+ $("#show-api-response-div pre[ref=response-raw]").text(xhr.responseText);
+
+ prettyPrint();
+ }
+});