Render headings

[MAILPOET-2613]
This commit is contained in:
Pavel Dohnal
2020-03-11 11:09:57 +01:00
committed by Veljko V
parent 1b05ea2e68
commit 2d4061b998
3 changed files with 131 additions and 4 deletions

View File

@@ -3,7 +3,71 @@
namespace MailPoet\Form\Block; namespace MailPoet\Form\Block;
class Heading { class Heading {
public function render(array $block, array $formSettings): string { public function render(array $block): string {
return '<h2></h2>'; $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
. "</$tag>";
}
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)
. '"';
} }
} }

View File

@@ -94,7 +94,7 @@ class BlocksRenderer {
break; break;
case 'heading': case 'heading':
$html .= $this->heading->render($block, $formSettings); $html .= $this->heading->render($block);
break; break;
case 'divider': case 'divider':

View File

@@ -14,7 +14,70 @@ class HeadingTest extends \MailPoetUnitTest {
} }
public function testItShouldRenderHeading() { public function testItShouldRenderHeading() {
$html = $this->heading->render([], []); $html = $this->heading->render([]);
expect($html)->startsWith('<h2'); expect($html)->startsWith('<h2');
} }
public function testItShouldRenderContent() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
],
]);
expect($html)->equals('<h2>Header</h2>');
}
public function testItShouldRenderLevel() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
'level' => 1,
],
]);
expect($html)->equals('<h1>Header</h1>');
}
public function testItShouldRenderClass() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
'level' => 1,
'class_name' => 'class1 class2',
],
]);
expect($html)->equals('<h1 class="class1 class2">Header</h1>');
}
public function testItShouldRenderAnchor() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
'level' => 1,
'anchor' => 'anchor',
],
]);
expect($html)->equals('<h1 id="anchor">Header</h1>');
}
public function testItShouldRenderAlign() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
'level' => 1,
'align' => 'right',
],
]);
expect($html)->equals('<h1 style="text-align: right">Header</h1>');
}
public function testItShouldRenderTextColour() {
$html = $this->heading->render([
'params' => [
'content' => 'Header',
'level' => 1,
'text_color' => 'red',
],
]);
expect($html)->equals('<h1 style="color: red">Header</h1>');
}
} }