Refactor block renderers to use wrapper renderer

[MAILPOET-2746]
This commit is contained in:
Rostislav Wolny
2020-03-12 15:53:15 +01:00
committed by Veljko V
parent 65afeca59e
commit 72a0afa75b
16 changed files with 124 additions and 53 deletions

View File

@ -2,6 +2,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Checkbox {
@ -9,11 +10,15 @@ class Checkbox {
/** @var BlockRendererHelper */
private $rendererHelper;
/** @var BlockWrapperRenderer */
private $wrapper;
/** @var WPFunctions */
private $wp;
public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) {
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
@ -23,8 +28,6 @@ class Checkbox {
$fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
$fieldValidation = $this->rendererHelper->getInputValidation($block);
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$options = (!empty($block['params']['values'])
@ -60,8 +63,6 @@ class Checkbox {
$html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,23 +2,26 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
class Date {
/** @var BlockRendererHelper */
private $rendererHelper;
public function __construct(BlockRendererHelper $rendererHelper) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
}
public function render(array $block, array $formSettings): string {
$html = '';
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$html .= $this->renderDateSelect($block);
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
private function renderDateSelect(array $block = []): string {

View File

@ -2,6 +2,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Radio {
@ -12,8 +13,12 @@ class Radio {
/** @var WPFunctions */
private $wp;
public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
@ -23,8 +28,6 @@ class Radio {
$fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
$fieldValidation = $this->rendererHelper->getInputValidation($block);
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$options = (!empty($block['params']['values'])
@ -68,8 +71,6 @@ class Radio {
$html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,6 +2,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Segment {
@ -12,8 +13,12 @@ class Segment {
/** @var WPFunctions */
private $wp;
public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
@ -23,8 +28,6 @@ class Segment {
$fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
$fieldValidation = $this->rendererHelper->getInputValidation($block);
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$options = (!empty($block['params']['values'])
@ -50,8 +53,6 @@ class Segment {
$html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,6 +2,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Select {
@ -12,8 +13,12 @@ class Select {
/** @var WPFunctions */
private $wp;
public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
@ -23,7 +28,6 @@ class Select {
$fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
$automationId = ($block['id'] == 'status') ? 'data-automation-id="form_status"' : '';
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$html .= '<select class="mailpoet_select" name="' . $fieldName . '" ' . $automationId . '>';
@ -71,8 +75,6 @@ class Select {
}
$html .= '</select>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,19 +2,25 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
class Submit {
/** @var BlockRendererHelper */
private $rendererHelper;
public function __construct(BlockRendererHelper $rendererHelper) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
}
public function render(array $block): string {
$html = '';
$html .= '<div class="mailpoet_paragraph"><input type="submit" class="mailpoet_submit" ';
$html .= '<input type="submit" class="mailpoet_submit" ';
$html .= 'value="' . $this->rendererHelper->getFieldLabel($block) . '" ';
@ -24,8 +30,6 @@ class Submit {
$html .= '<span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,19 +2,27 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Form\TextInputStylesRenderer;
class Text {
/** @var BlockRendererHelper */
private $rendererHelper;
/** @var TextInputStylesRenderer */
private $inputStylesRenderer;
public function __construct(BlockRendererHelper $rendererHelper, TextInputStylesRenderer $inputStylesRenderer) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(
BlockRendererHelper $rendererHelper,
TextInputStylesRenderer $inputStylesRenderer,
BlockWrapperRenderer $wrapper
) {
$this->rendererHelper = $rendererHelper;
$this->inputStylesRenderer = $inputStylesRenderer;
$this->wrapper = $wrapper;
}
public function render(array $block, array $formSettings): string {
@ -34,7 +42,7 @@ class Text {
$automationId = 'data-automation-id="form_' . $block['id'] . '" ';
}
$html = '<div class="mailpoet_paragraph">';
$html = '';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
@ -60,8 +68,6 @@ class Text {
$html .= '/>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -2,6 +2,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Form\TextInputStylesRenderer;
class Textarea {
@ -11,17 +12,23 @@ class Textarea {
/** @var TextInputStylesRenderer */
private $inputStylesRenderer;
public function __construct(BlockRendererHelper $rendererHelper, TextInputStylesRenderer $inputStylesRenderer) {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(
BlockRendererHelper $rendererHelper,
TextInputStylesRenderer $inputStylesRenderer,
BlockWrapperRenderer $wrapper
) {
$this->rendererHelper = $rendererHelper;
$this->inputStylesRenderer = $inputStylesRenderer;
$this->wrapper = $wrapper;
}
public function render(array $block, array $formSettings): string {
$html = '';
$styles = $this->inputStylesRenderer->render($block['styles'] ?? []);
$html .= '<div class="mailpoet_paragraph">';
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
$lines = (isset($block['params']['lines']) ? (int)$block['params']['lines'] : 1);
@ -42,8 +49,6 @@ class Textarea {
$html .= '>' . $this->rendererHelper->getFieldValue($block) . '</textarea>';
$html .= '</div>';
return $html;
return $this->wrapper->render($block, $html);
}
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Checkbox;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
@ -20,6 +21,9 @@ class CheckboxTest extends \MailPoetUnitTest {
/** @var MockObject & BlockRendererHelper */
private $rendererHelperMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -46,7 +50,9 @@ class CheckboxTest extends \MailPoetUnitTest {
$this->wpMock = $this->createMock(WPFunctions::class);
$this->wpMock->method('escAttr')->will($this->returnArgument(0));
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->checkbox = new Checkbox($this->rendererHelperMock, $this->wpMock);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->checkbox = new Checkbox($this->rendererHelperMock, $this->wrapperMock, $this->wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Date;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoetVendor\Carbon\Carbon;
use PHPUnit\Framework\MockObject\MockObject;
@ -17,6 +18,9 @@ class DateTest extends \MailPoetUnitTest {
/** @var MockObject & BlockRendererHelper */
private $baseMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -39,7 +43,9 @@ class DateTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->baseMock = $this->createMock(BlockRendererHelper::class);
$this->date = new Date($this->baseMock);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->date = new Date($this->baseMock, $this->wrapperMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Radio;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
@ -20,6 +21,9 @@ class RadioTest extends \MailPoetUnitTest {
/** @var MockObject & WPFunctions */
private $rendererHelperMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -48,8 +52,10 @@ class RadioTest extends \MailPoetUnitTest {
parent::_before();
$this->rendererHelperMock = $this->createMock(WPFunctions::class);
$this->rendererHelperMock->method('escAttr')->will($this->returnArgument(0));
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->baseMock = $this->createMock(BlockRendererHelper::class);
$this->radio = new Radio($this->baseMock, $this->rendererHelperMock);
$this->radio = new Radio($this->baseMock, $this->wrapperMock, $this->rendererHelperMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Segment;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
@ -20,6 +21,9 @@ class SegmentTest extends \MailPoetUnitTest {
/** @var MockObject & BlockRendererHelper */
private $rendererHelperMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -47,8 +51,10 @@ class SegmentTest extends \MailPoetUnitTest {
parent::_before();
$this->wpMock = $this->createMock(WPFunctions::class);
$this->wpMock->method('escAttr')->will($this->returnArgument(0));
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->segment = new Segment($this->rendererHelperMock, $this->wpMock);
$this->segment = new Segment($this->rendererHelperMock, $this->wrapperMock, $this->wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Select;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Models\Subscriber;
use MailPoet\WP\Functions;
use PHPUnit\Framework\MockObject\MockObject;
@ -21,16 +22,21 @@ class SelectTest extends \MailPoetUnitTest {
/** @var MockObject & BlockRendererHelper */
private $rendererHelperMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
public function _before() {
parent::_before();
$this->wpMock = $this->createMock(Functions::class);
$this->wpMock->method('escAttr')->will($this->returnArgument(0));
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->rendererHelperMock->method('getFieldName')->will($this->returnValue('select'));
$this->rendererHelperMock->method('renderLabel')->will($this->returnValue('<label></label>'));
$this->rendererHelperMock->method('getFieldLabel')->will($this->returnValue('Field label'));
$this->rendererHelperMock->method('getFieldValue')->will($this->returnValue('1'));
$this->selectBlock = new Select($this->rendererHelperMock, $this->wpMock);
$this->selectBlock = new Select($this->rendererHelperMock, $this->wrapperMock, $this->wpMock);
$this->block = [
'id' => 'status',
'type' => 'select',

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Submit;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use PHPUnit\Framework\MockObject\MockObject;
@ -16,6 +17,9 @@ class SubmitTest extends \MailPoetUnitTest {
/** @var MockObject & BlockRendererHelper */
private $rendererHelperMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -34,7 +38,9 @@ class SubmitTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->submit = new Submit($this->rendererHelperMock);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->submit = new Submit($this->rendererHelperMock, $this->wrapperMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Text;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Form\TextInputStylesRenderer;
use MailPoet\Test\Form\HtmlParser;
use PHPUnit\Framework\MockObject\MockObject;
@ -20,6 +21,9 @@ class TextTest extends \MailPoetUnitTest {
/** @var MockObject & TextInputStylesRenderer */
private $stylesRendererMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -41,7 +45,9 @@ class TextTest extends \MailPoetUnitTest {
parent::_before();
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->stylesRendererMock = $this->createMock(TextInputStylesRenderer::class);
$this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Textarea;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Form\TextInputStylesRenderer;
use MailPoet\Test\Form\HtmlParser;
use PHPUnit\Framework\MockObject\MockObject;
@ -20,6 +21,9 @@ class TextareaTest extends \MailPoetUnitTest {
/** @var MockObject & TextInputStylesRenderer */
private $stylesRendererMock;
/** @var MockObject & BlockWrapperRenderer */
private $wrapperMock;
/** @var HtmlParser */
private $htmlParser;
@ -42,7 +46,9 @@ class TextareaTest extends \MailPoetUnitTest {
parent::_before();
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->stylesRendererMock = $this->createMock(TextInputStylesRenderer::class);
$this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock);
$this->htmlParser = new HtmlParser();
}