diff --git a/lib/Form/Block/Heading.php b/lib/Form/Block/Heading.php index 5b58eaf47a..2a3b9c0030 100644 --- a/lib/Form/Block/Heading.php +++ b/lib/Form/Block/Heading.php @@ -3,7 +3,71 @@ namespace MailPoet\Form\Block; class Heading { - public function render(array $block, array $formSettings): string { - return '

'; + public function render(array $block): string { + $content = ($block['params']['content'] ?? ''); + return $this->wrapContent($content, $block); + } + + private function wrapContent(string $content, array $block): string { + $tag = $this->renderTag($block); + $attributes = $this->renderAttributes($block); + $openTag = $this->getOpenTag($tag, $attributes); + return $openTag + . $content + . ""; + } + + private function renderTag(array $block): string { + $tag = 'h2'; + if (isset($block['params']['level'])) { + $tag = 'h' . $block['params']['level']; + } + return $tag; + } + + private function renderAttributes(array $block): array { + $result = []; + if (isset($block['params']['class_name'])) { + $result[] = $this->renderClass($block); + } + if (isset($block['params']['anchor'])) { + $result[] = $this->renderAnchor($block); + } + if (isset($block['params']['align']) || isset($block['params']['text_color'])) { + $result[] = $this->renderStyle($block); + } + return $result; + } + + private function getOpenTag(string $tag, array $attributes): string { + if (empty($attributes)) { + return "<$tag>"; + } + return "<$tag " . join(' ', $attributes) . ">"; + } + + private function renderClass(array $block): string { + return 'class="' + . $block['params']['class_name'] + . '"'; + } + + private function renderAnchor(array $block): string { + return 'id="' + . $block['params']['anchor'] + . '"'; + } + + private function renderStyle(array $block): string { + $styles = []; + if (isset($block['params']['align'])) { + $styles[] = 'text-align: ' . $block['params']['align']; + } + if (isset($block['params']['text_color'])) { + $styles[] = 'color: ' . $block['params']['text_color']; + } + return 'style="' + . join('; ', $styles) + . '"'; } } diff --git a/lib/Form/BlocksRenderer.php b/lib/Form/BlocksRenderer.php index 11aea7b006..598ffbbc5e 100644 --- a/lib/Form/BlocksRenderer.php +++ b/lib/Form/BlocksRenderer.php @@ -94,7 +94,7 @@ class BlocksRenderer { break; case 'heading': - $html .= $this->heading->render($block, $formSettings); + $html .= $this->heading->render($block); break; case 'divider': diff --git a/tests/unit/Form/Block/HeadingTest.php b/tests/unit/Form/Block/HeadingTest.php index 18833fe83d..dbbda13ae5 100644 --- a/tests/unit/Form/Block/HeadingTest.php +++ b/tests/unit/Form/Block/HeadingTest.php @@ -14,7 +14,70 @@ class HeadingTest extends \MailPoetUnitTest { } public function testItShouldRenderHeading() { - $html = $this->heading->render([], []); + $html = $this->heading->render([]); expect($html)->startsWith('heading->render([ + 'params' => [ + 'content' => 'Header', + ], + ]); + expect($html)->equals('

Header

'); + } + + public function testItShouldRenderLevel() { + $html = $this->heading->render([ + 'params' => [ + 'content' => 'Header', + 'level' => 1, + ], + ]); + expect($html)->equals('

Header

'); + } + + public function testItShouldRenderClass() { + $html = $this->heading->render([ + 'params' => [ + 'content' => 'Header', + 'level' => 1, + 'class_name' => 'class1 class2', + ], + ]); + expect($html)->equals('

Header

'); + } + + public function testItShouldRenderAnchor() { + $html = $this->heading->render([ + 'params' => [ + 'content' => 'Header', + 'level' => 1, + 'anchor' => 'anchor', + ], + ]); + expect($html)->equals('

Header

'); + } + + public function testItShouldRenderAlign() { + $html = $this->heading->render([ + 'params' => [ + 'content' => 'Header', + 'level' => 1, + 'align' => 'right', + ], + ]); + expect($html)->equals('

Header

'); + } + + public function testItShouldRenderTextColour() { + $html = $this->heading->render([ + 'params' => [ + 'content' => 'Header', + 'level' => 1, + 'text_color' => 'red', + ], + ]); + expect($html)->equals('

Header

'); + } }