From c9e7efcc4242efa48b34ac6b654ff0bf0cefe47e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Place=CC=81?= <> Date: Mon, 6 Dec 2021 17:27:03 +0100 Subject: [PATCH 1/2] retrieve attributes from the block before rendering --- src/DefinitionListItemDefinitionRenderer.php | 4 +++- src/DefinitionListItemTermRenderer.php | 4 +++- src/DefinitionListRenderer.php | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/DefinitionListItemDefinitionRenderer.php b/src/DefinitionListItemDefinitionRenderer.php index e133ec2..2b4abe1 100644 --- a/src/DefinitionListItemDefinitionRenderer.php +++ b/src/DefinitionListItemDefinitionRenderer.php @@ -14,6 +14,8 @@ public function render(AbstractBlock $block, ElementRendererInterface $htmlRende throw new \InvalidArgumentException('Incompatible block type: ' . \get_class($block)); } - return new HtmlElement('dd', [], $htmlRenderer->renderBlocks($block->children(), $inTightList)); + $attrs = $block->getData('attributes', []); + + return new HtmlElement('dd', $attrs, $htmlRenderer->renderBlocks($block->children(), $inTightList)); } } diff --git a/src/DefinitionListItemTermRenderer.php b/src/DefinitionListItemTermRenderer.php index 7fc0d7f..1fe2d78 100644 --- a/src/DefinitionListItemTermRenderer.php +++ b/src/DefinitionListItemTermRenderer.php @@ -14,6 +14,8 @@ public function render(AbstractBlock $block, ElementRendererInterface $htmlRende throw new \InvalidArgumentException('Incompatible block type: ' . \get_class($block)); } - return new HtmlElement('dt', [], $htmlRenderer->renderInlines($block->children())); + $attrs = $block->getData('attributes', []); + + return new HtmlElement('dt', $attrs, $htmlRenderer->renderInlines($block->children())); } } diff --git a/src/DefinitionListRenderer.php b/src/DefinitionListRenderer.php index be3287d..ebb7fb6 100644 --- a/src/DefinitionListRenderer.php +++ b/src/DefinitionListRenderer.php @@ -14,6 +14,8 @@ public function render(AbstractBlock $block, ElementRendererInterface $htmlRende throw new \InvalidArgumentException('Incompatible block type: ' . \get_class($block)); } - return new HtmlElement('dl', [], $htmlRenderer->renderBlocks($block->children(), $block->isTight())); + $attrs = $block->getData('attributes', []); + + return new HtmlElement('dl', $attrs, $htmlRenderer->renderBlocks($block->children(), $block->isTight())); } } From 5148cd60d5e2f9c4ca7076e6da5df4d0ea7747ee Mon Sep 17 00:00:00 2001 From: Arnout Boks Date: Mon, 20 Dec 2021 20:27:41 +0100 Subject: [PATCH 2/2] Add tests for attribute rendering support --- test/AttributeRenderingTest.php | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/AttributeRenderingTest.php diff --git a/test/AttributeRenderingTest.php b/test/AttributeRenderingTest.php new file mode 100644 index 0000000..e0c4fbe --- /dev/null +++ b/test/AttributeRenderingTest.php @@ -0,0 +1,49 @@ +addExtension(new DefinitionListExtension()); + $this->renderer = new HtmlRenderer($environment); + } + + public function testCorrectlyRendersAttributesOfDefinitionList(): void + { + $block = new DefinitionList(); + $block->data['attributes'] = ['id' => 'foo']; + $actualOutput = $this->renderer->renderBlock($block); + + $this->assertXmlStringEqualsXmlString("
", "$actualOutput"); + } + + public function testCorrectlyRendersAttributesOfDefinitionListItemDefinition(): void + { + $block = new DefinitionListItemDefinition(); + $block->data['attributes'] = ['id' => 'foo']; + $actualOutput = $this->renderer->renderBlock($block); + + $this->assertXmlStringEqualsXmlString("
", "$actualOutput"); + } + + public function testCorrectlyRendersAttributesOfDefinitionListItemTerm(): void + { + $block = new DefinitionListItemTerm([]); + $block->data['attributes'] = ['id' => 'foo']; + $actualOutput = $this->renderer->renderBlock($block); + + $this->assertXmlStringEqualsXmlString("
", "$actualOutput"); + } +}