From f6ad33165e2eaefc5250a0fb6a12c14c03ce2170 Mon Sep 17 00:00:00 2001 From: Roj Vroemen Date: Fri, 21 Jun 2024 15:21:52 +0200 Subject: [PATCH] HTMX support (#1629) * Prevent duplicate debugbar on HTMX request with a target * Adding tests for HTMX requests --- src/LaravelDebugbar.php | 6 ++++-- tests/DebugbarTest.php | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/LaravelDebugbar.php b/src/LaravelDebugbar.php index 6301c81e5..6fc3e4aae 100644 --- a/src/LaravelDebugbar.php +++ b/src/LaravelDebugbar.php @@ -852,8 +852,10 @@ protected function isDebugbarRequest() */ protected function isJsonRequest(Request $request) { - // If XmlHttpRequest or Live, return true - if ($request->isXmlHttpRequest() || $request->headers->has('X-Livewire')) { + // If XmlHttpRequest, Live or HTMX, return true + if ($request->isXmlHttpRequest() || + $request->headers->has('X-Livewire') || + ($request->headers->has('Hx-Request') && $request->headers->has('Hx-Target'))) { return true; } diff --git a/tests/DebugbarTest.php b/tests/DebugbarTest.php index 2fc9c30c5..0aab2c438 100644 --- a/tests/DebugbarTest.php +++ b/tests/DebugbarTest.php @@ -52,4 +52,25 @@ public function testItDoesntInjectOnJson() $this->assertFalse(Str::contains($crawler->content(), 'debugbar')); $this->assertEquals(200, $crawler->getStatusCode()); } + + public function testItDoesntInjectsOnHxRequestWithHxTarget() + { + $crawler = $this->get('web/html', [ + 'Hx-Request' => 'true', + 'Hx-Target' => 'main', + ]); + + $this->assertFalse(Str::contains($crawler->content(), 'debugbar')); + $this->assertEquals(200, $crawler->getStatusCode()); + } + + public function testItInjectsOnHxRequestWithoutHxTarget() + { + $crawler = $this->get('web/html', [ + 'Hx-Request' => 'true', + ]); + + $this->assertTrue(Str::contains($crawler->content(), 'debugbar')); + $this->assertEquals(200, $crawler->getStatusCode()); + } }