').text(text).html();
- };
-
- var displayFinalUrl = function(xhr, method, url, container) {
- container.html(method + ' ' + url);
- };
-
- var displayResponseData = function(xhr, container) {
- var data = xhr.responseText;
-
- container.data('raw-response', data);
-
- if ('<' === data[0]) {
- renderRawBody(container);
+ {% if enableSandbox %}
+ var toggleButtonText = function ($btn) {
+ if ($btn.text() === 'Default') {
+ $btn.text('Raw');
} else {
- renderPrettifiedBody(container);
+ $btn.text('Default');
}
-
- container.parents('.pane').find('.to-prettify').text('Raw');
- container.parents('.pane').find('.to-raw').text('Raw');
- };
-
- var displayResponseHeaders = function(xhr, container) {
- var text = xhr.status + ' ' + xhr.statusText + "\n\n";
- text += xhr.getAllResponseHeaders();
-
- container.html(text);
- };
-
- var displayResponse = function(xhr, method, url, result_container) {
- displayFinalUrl(xhr, method, url, $('.url', result_container));
- displayResponseData(xhr, $('.response', result_container));
- displayResponseHeaders(xhr, $('.headers', result_container));
-
- result_container.show();
- };
-
- $('.pane.sandbox form').submit(function() {
- var url = $(this).attr('action'),
- method = $(this).attr('method'),
- self = this,
- params = {
- _format: 'json' // default format if not overriden in the form
- },
- headers = {},
- content = $(this).find('textarea.content').val();
- result_container = $('.result', $(this).parent());
-
- // retrieve all the parameters to send
- $('.parameters .tuple', $(this)).each(function() {
- var key, value;
-
- key = $('.key', $(this)).val();
- value = $('.value', $(this)).val();
-
- if (value) {
- params[key] = value;
- }
- });
-
- // retrieve the additional headers to send
- $('.headers .tuple', $(this)).each(function() {
- var key, value;
-
- key = $('.key', $(this)).val();
- value = $('.value', $(this)).val();
-
- if (value) {
- headers[key] = value;
- }
- });
-
- // fix parameters in URL
- for (var key in $.extend({}, params)) {
- if (url.indexOf('{' + key + '}') !== -1) {
- url = url.replace('{' + key + '}', params[key]);
- delete params[key];
- }
};
- // disable all the fiels and buttons
- $('input, button', $(this)).attr('disabled', 'disabled');
+ var renderRawBody = function ($container) {
+ var rawData, $btn;
- // and trigger the API call
- $.ajax({
- url: '{{ sandboxTarget }}' + url,
- type: method,
- data: content.length ? content : params,
- headers: headers,
- complete: function(xhr) {
- displayResponse(xhr, method, url, result_container);
+ rawData = $container.data('raw-response');
+ $btn = $container.parents('.pane').find('.to-raw');
- // and enable them back
- $('input:not(.content-type), button', $(self)).removeAttr('disabled');
- }
+ $container.addClass('prettyprinted');
+ $container.html(rawData);
+
+ $btn.removeClass('to-raw');
+ $btn.addClass('to-prettify');
+
+ toggleButtonText($btn);
+ };
+
+ var renderPrettifiedBody = function ($container) {
+ var rawData, $btn;
+
+ rawData = $container.data('raw-response');
+ $btn = $container.parents('.pane').find('.to-prettify');
+
+ $container.removeClass('prettyprinted');
+ $container.html(prettifyResponse(rawData));
+ prettyPrint && prettyPrint();
+
+ $btn.removeClass('to-prettify');
+ $btn.addClass('to-raw');
+
+ toggleButtonText($btn);
+ };
+
+ $('.tabs li').click(function() {
+ var contentGroup = $(this).parents('.content');
+
+ $('.pane.selected', contentGroup).removeClass('selected');
+ $('.pane.' + $(this).data('pane'), contentGroup).addClass('selected');
+
+ $('li', $(this).parent()).removeClass('selected');
+ $(this).addClass('selected');
});
- return false;
- });
-
- $('.pane.sandbox').delegate('.to-raw', 'click', function(e) {
- renderRawBody($(this).parents('.pane').find('.response'));
-
- e.preventDefault();
- });
-
- $('.pane.sandbox').delegate('.to-prettify', 'click', function(e) {
- renderPrettifiedBody($(this).parents('.pane').find('.response'));
-
- e.preventDefault();
- });
-
- $('.pane.sandbox').delegate('.to-expand, .to-shrink', 'click', function(e) {
- var $headers = $(this).parents('.result').find('.headers');
- var $label = $(this).parents('.result').find('a.to-expand');
-
- if ($headers.hasClass('to-expand')) {
- $headers.removeClass('to-expand');
- $headers.addClass('to-shrink');
- $label.text('Shrink');
- } else {
- $headers.removeClass('to-shrink');
- $headers.addClass('to-expand');
- $label.text('Expand');
- }
-
- e.preventDefault();
- });
-
- $('.pane.sandbox').on('click', '.add', function() {
- var html = $(this).parents('.pane').find('.tuple_template').html();
-
- $(this).before(html);
-
- return false;
- });
-
- $('.pane.sandbox').on('click', '.remove', function() {
- $(this).parent().remove();
- });
-
- $('.pane.sandbox').on('click', '.set-content-type', function(e) {
- var html;
- var $element;
- var $headers = $(this).parents('form').find('.headers');
- var content_type = $(this).prev('input.value').val();
-
- e.preventDefault();
-
- if (content_type.length === 0) {
- return;
- }
-
- $headers.find('input.key').each(function() {
- if ($.trim($(this).val().toLowerCase()) === 'content-type') {
- $element = $(this).parents('p');
- return false;
+ var prettifyResponse = function(text) {
+ try {
+ var data = typeof text === 'string' ? JSON.parse(text) : text;
+ text = JSON.stringify(data, undefined, ' ');
+ } catch (err) {
}
+
+ // HTML encode the result
+ return $('
').text(text).html();
+ };
+
+ var displayFinalUrl = function(xhr, method, url, container) {
+ container.html(method + ' ' + url);
+ };
+
+ var displayResponseData = function(xhr, container) {
+ var data = xhr.responseText;
+
+ container.data('raw-response', data);
+
+ if ('<' === data[0]) {
+ renderRawBody(container);
+ } else {
+ renderPrettifiedBody(container);
+ }
+
+ container.parents('.pane').find('.to-prettify').text('Raw');
+ container.parents('.pane').find('.to-raw').text('Raw');
+ };
+
+ var displayResponseHeaders = function(xhr, container) {
+ var text = xhr.status + ' ' + xhr.statusText + "\n\n";
+ text += xhr.getAllResponseHeaders();
+
+ container.html(text);
+ };
+
+ var displayResponse = function(xhr, method, url, result_container) {
+ displayFinalUrl(xhr, method, url, $('.url', result_container));
+ displayResponseData(xhr, $('.response', result_container));
+ displayResponseHeaders(xhr, $('.headers', result_container));
+
+ result_container.show();
+ };
+
+ $('.pane.sandbox form').submit(function() {
+ var url = $(this).attr('action'),
+ method = $(this).attr('method'),
+ self = this,
+ params = {
+ _format: 'json' // default format if not overriden in the form
+ },
+ headers = {},
+ content = $(this).find('textarea.content').val();
+ result_container = $('.result', $(this).parent());
+
+ // retrieve all the parameters to send
+ $('.parameters .tuple', $(this)).each(function() {
+ var key, value;
+
+ key = $('.key', $(this)).val();
+ value = $('.value', $(this)).val();
+
+ if (value) {
+ params[key] = value;
+ }
+ });
+
+ // retrieve the additional headers to send
+ $('.headers .tuple', $(this)).each(function() {
+ var key, value;
+
+ key = $('.key', $(this)).val();
+ value = $('.value', $(this)).val();
+
+ if (value) {
+ headers[key] = value;
+ }
+ });
+
+ // fix parameters in URL
+ for (var key in $.extend({}, params)) {
+ if (url.indexOf('{' + key + '}') !== -1) {
+ url = url.replace('{' + key + '}', params[key]);
+ delete params[key];
+ }
+ };
+
+ // disable all the fiels and buttons
+ $('input, button', $(this)).attr('disabled', 'disabled');
+
+ // and trigger the API call
+ $.ajax({
+ url: '{{ endpoint }}' + url,
+ type: method,
+ data: content.length ? content : params,
+ headers: headers,
+ complete: function(xhr) {
+ displayResponse(xhr, method, url, result_container);
+
+ // and enable them back
+ $('input:not(.content-type), button', $(self)).removeAttr('disabled');
+ }
+ });
+
+ return false;
});
- if (typeof $element === 'undefined') {
- html = $(this).parents('.pane').find('.tuple_template').html();
+ $('.pane.sandbox').delegate('.to-raw', 'click', function(e) {
+ renderRawBody($(this).parents('.pane').find('.response'));
- $element = $headers.find('legend').after(html).next('p');
- }
+ e.preventDefault();
+ });
- $element.find('input.key').val('Content-Type');
- $element.find('input.value').val(content_type);
+ $('.pane.sandbox').delegate('.to-prettify', 'click', function(e) {
+ renderPrettifiedBody($(this).parents('.pane').find('.response'));
- });
+ e.preventDefault();
+ });
+
+ $('.pane.sandbox').delegate('.to-expand, .to-shrink', 'click', function(e) {
+ var $headers = $(this).parents('.result').find('.headers');
+ var $label = $(this).parents('.result').find('a.to-expand');
+
+ if ($headers.hasClass('to-expand')) {
+ $headers.removeClass('to-expand');
+ $headers.addClass('to-shrink');
+ $label.text('Shrink');
+ } else {
+ $headers.removeClass('to-shrink');
+ $headers.addClass('to-expand');
+ $label.text('Expand');
+ }
+
+ e.preventDefault();
+ });
+
+ $('.pane.sandbox').on('click', '.add', function() {
+ var html = $(this).parents('.pane').find('.tuple_template').html();
+
+ $(this).before(html);
+
+ return false;
+ });
+
+ $('.pane.sandbox').on('click', '.remove', function() {
+ $(this).parent().remove();
+ });
+
+ $('.pane.sandbox').on('click', '.set-content-type', function(e) {
+ var html;
+ var $element;
+ var $headers = $(this).parents('form').find('.headers');
+ var content_type = $(this).prev('input.value').val();
+
+ e.preventDefault();
+
+ if (content_type.length === 0) {
+ return;
+ }
+
+ $headers.find('input.key').each(function() {
+ if ($.trim($(this).val().toLowerCase()) === 'content-type') {
+ $element = $(this).parents('p');
+ return false;
+ }
+ });
+
+ if (typeof $element === 'undefined') {
+ html = $(this).parents('.pane').find('.tuple_template').html();
+
+ $element = $headers.find('legend').after(html).next('p');
+ }
+
+ $element.find('input.key').val('Content-Type');
+ $element.find('input.value').val(content_type);
+
+ });
+ {% endif %}