From 3d37997607cccdfa921a162dfbcdcbdc3e778752 Mon Sep 17 00:00:00 2001 From: Guflly <145608489+Guflly@users.noreply.github.com> Date: Mon, 27 Jul 2026 14:20:37 -0700 Subject: [PATCH] feature: add dynamic path body classes --- src/Logic/HTMLDocumentProcessor.php | 8 +++++++ .../Logic/HTMLDocumentProcessorTest.php | 21 ++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Logic/HTMLDocumentProcessor.php b/src/Logic/HTMLDocumentProcessor.php index 6078780d..9a61760f 100644 --- a/src/Logic/HTMLDocumentProcessor.php +++ b/src/Logic/HTMLDocumentProcessor.php @@ -27,6 +27,14 @@ function processDynamicPath( } $bodyDirClass .= "--$pathPart"; $model->body->classList->add($bodyDirClass); + if(str_starts_with($pathPart, "_")) { + $dynamicValue = $dynamicPath->get(substr($pathPart, 1)); + if($dynamicValue !== null) { + $model->body->classList->add( + "$pathPart--$dynamicValue", + ); + } + } } } diff --git a/test/phpunit/Logic/HTMLDocumentProcessorTest.php b/test/phpunit/Logic/HTMLDocumentProcessorTest.php index 642da475..05c296d0 100644 --- a/test/phpunit/Logic/HTMLDocumentProcessorTest.php +++ b/test/phpunit/Logic/HTMLDocumentProcessorTest.php @@ -33,22 +33,29 @@ protected function tearDown():void { parent::tearDown(); } - public function testProcessDynamicPath_addsUriAndDirectoryClasses():void { + public function testProcessDynamicPath_addsUriDirectoryAndDynamicClasses():void { $viewAssembly = new Assembly(); - $viewAssembly->add("page/blog/@id/article.html"); + $viewAssembly->add("page/shop/@shop-area/@brand/@item.html"); $processor = new HTMLDocumentProcessor("components", "partials"); $document = new HTMLDocument(""); $processor->processDynamicPath( $document, - new DynamicPath("/blog/42/article/", $viewAssembly), + new DynamicPath( + "/shop/computers/apple/macbook-pro/", + $viewAssembly, + ), ); $classes = iterator_to_array($document->body->classList); - self::assertContains("uri--blog--_id--article", $classes); - self::assertContains("dir--blog", $classes); - self::assertContains("dir--blog--_id", $classes); - self::assertContains("dir--blog--_id--article", $classes); + self::assertContains("uri--shop--_shop-area--_brand--_item", $classes); + self::assertContains("dir--shop", $classes); + self::assertContains("dir--shop--_shop-area", $classes); + self::assertContains("dir--shop--_shop-area--_brand", $classes); + self::assertContains("dir--shop--_shop-area--_brand--_item", $classes); + self::assertContains("_shop-area--computers", $classes); + self::assertContains("_brand--apple", $classes); + self::assertContains("_item--macbook-pro", $classes); } public function testProcessPartialContent_expandsComponentsAndPartialsAndRegistersOnlyLogicBackedComponents():void {