diff --git a/Resources/public/css/screen.css b/Resources/public/css/screen.css index 8056e24..6a49cce 100644 --- a/Resources/public/css/screen.css +++ b/Resources/public/css/screen.css @@ -616,3 +616,8 @@ form .request-content { .motd { padding:20px; } + +.json-toggle-section { + color: #660; + cursor: pointer; +} diff --git a/Resources/views/layout.html.twig b/Resources/views/layout.html.twig index b9658db..c4184b5 100755 --- a/Resources/views/layout.html.twig +++ b/Resources/views/layout.html.twig @@ -243,7 +243,7 @@ $btn = $container.parents('.pane').find('.to-prettify'); $container.removeClass('prettyprinted'); - $container.html(prettifyResponse(rawData)); + $container.html(attachCollapseMarker(prettifyResponse(rawData))); prettyPrint && prettyPrint(); $btn.removeClass('to-prettify'); @@ -275,7 +275,7 @@ } } return body; - } + }; $('#save_api_auth').click(function(event) { $.each(apiAuthKeys, function(_, value) { @@ -306,6 +306,22 @@ $(this).addClass('selected'); }); + var getJsonCollapseHtml = function(sectionOpenCharacter) { + var $toggler = $('').addClass('json-collapse-section'). + attr('data-section-open-character', sectionOpenCharacter). + append($('').addClass('json-collapse-marker') + .html('▿') + ).append(sectionOpenCharacter); + return $('
').append($toggler).html(); + }; + + var attachCollapseMarker = function (prettifiedJsonString) { + prettifiedJsonString = prettifiedJsonString.replace(/(\{|\[)\n/g, function(match, sectionOpenCharacter) { + return getJsonCollapseHtml(sectionOpenCharacter) + '\n'; + }); + return prettifiedJsonString.replace(/([^\[][\}\]]),?\n/g, '$1\n'); + }; + var prettifyResponse = function(text) { try { var data = typeof text === 'string' ? JSON.parse(text) : text; @@ -570,6 +586,25 @@ } }); + $('.json-collapse-section').on('click', function(){ + var openChar = $(this).data('section-open-character'), + closingChar = (openChar == '{' ? '}' : ']'); + if ($(this).next('.json-collapse-content').is(':visible')) { + $(this).html('⊕' + openChar + '...' + closingChar); + } else { + $(this).html('▿' + $(this).data('section-open-character')); + } + $(this).next('.json-collapse-content').toggle(); + }); + + $(document).on('copy', '.prettyprinted', function () { + var $toggleMarkers = $(this).find('.json-collapse-marker'); + $toggleMarkers.hide(); + setTimeout(function () { + $toggleMarkers.show(); + }, 100); + }); + $('.pane.sandbox').on('click', '.to-raw', function(e) { renderRawBody($(this).parents('.pane').find('.response')); diff --git a/Tests/Parser/ValidationParserTest.php b/Tests/Parser/ValidationParserTest.php index d614b6e..b9123b6 100644 --- a/Tests/Parser/ValidationParserTest.php +++ b/Tests/Parser/ValidationParserTest.php @@ -14,7 +14,12 @@ class ValidationParserTest extends WebTestCase public function setUp() { $container = $this->getContainer(); - $factory = $container->get('validator')->getMetadataFactory(); + + if($container->has('validator.mapping.class_metadata_factory')){ + $factory = $container->get('validator.mapping.class_metadata_factory'); + }else { + $factory = $container->get('validator'); + } if (version_compare(Kernel::VERSION, '2.2.0', '<')) { $this->parser = new ValidationParserLegacy($factory);