Remove BlocksRenderer and fix tests
[MAILPOET-5591]
This commit is contained in:
@ -341,7 +341,6 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TopLevelPreprocessor::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TypographyPreprocessor::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Renderer::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRegistry::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\PreprocessManager::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::class)->setPublic(true);
|
||||
|
@ -1,35 +0,0 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||
|
||||
class BlocksRenderer {
|
||||
|
||||
/** @var BlocksRegistry */
|
||||
private $blockRenderersRegistry;
|
||||
|
||||
/** @var bool */
|
||||
private $blocksInitialized = false;
|
||||
|
||||
public function __construct(
|
||||
BlocksRegistry $blockRenderersRegistry
|
||||
) {
|
||||
$this->blockRenderersRegistry = $blockRenderersRegistry;
|
||||
}
|
||||
|
||||
public function render(array $parsedBlocks): string {
|
||||
if (!$this->blocksInitialized) {
|
||||
$this->blocksInitialized = true;
|
||||
do_action('mailpoet_blocks_renderer_initialized', $this->blockRenderersRegistry);
|
||||
}
|
||||
|
||||
$content = '';
|
||||
foreach ($parsedBlocks as $parsedBlock) {
|
||||
$content .= render_block($parsedBlock);
|
||||
}
|
||||
|
||||
do_action('mailpoet_blocks_renderer_uninitialized', $this->blockRenderersRegistry);
|
||||
$this->blocksInitialized = false;
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
@ -11,8 +11,8 @@ class Renderer {
|
||||
/** @var \MailPoetVendor\CSS */
|
||||
private $cssInliner;
|
||||
|
||||
/** @var BlocksRenderer */
|
||||
private $blocksRenderer;
|
||||
/** @var BlocksRegistry */
|
||||
private $blocksRegistry;
|
||||
|
||||
/** @var PreprocessManager */
|
||||
private $preprocessManager;
|
||||
@ -29,12 +29,12 @@ class Renderer {
|
||||
public function __construct(
|
||||
\MailPoetVendor\CSS $cssInliner,
|
||||
PreprocessManager $preprocessManager,
|
||||
BlocksRenderer $blocksRenderer,
|
||||
BlocksRegistry $blocksRegistry,
|
||||
SettingsController $settingsController
|
||||
) {
|
||||
$this->cssInliner = $cssInliner;
|
||||
$this->preprocessManager = $preprocessManager;
|
||||
$this->blocksRenderer = $blocksRenderer;
|
||||
$this->blocksRegistry = $blocksRegistry;
|
||||
$this->settingsController = $settingsController;
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ class Renderer {
|
||||
|
||||
$layoutStyles = $this->settingsController->getEmailLayoutStyles();
|
||||
$parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles);
|
||||
$renderedBody = $this->blocksRenderer->render($parsedBlocks);
|
||||
$renderedBody = $this->renderBlocks($parsedBlocks);
|
||||
|
||||
$styles = (string)file_get_contents(dirname(__FILE__) . '/' . self::TEMPLATE_STYLES_FILE);
|
||||
$styles = apply_filters('mailpoet_email_renderer_styles', $styles, $post);
|
||||
@ -87,6 +87,19 @@ class Renderer {
|
||||
];
|
||||
}
|
||||
|
||||
public function renderBlocks(array $parsedBlocks): string {
|
||||
do_action('mailpoet_blocks_renderer_initialized', $this->blocksRegistry);
|
||||
|
||||
$content = '';
|
||||
foreach ($parsedBlocks as $parsedBlock) {
|
||||
$content .= render_block($parsedBlock);
|
||||
}
|
||||
|
||||
do_action('mailpoet_blocks_renderer_uninitialized', $this->blocksRegistry);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
private function injectContentIntoTemplate($template, array $content) {
|
||||
return preg_replace_callback('/{{\w+}}/', function($matches) use (&$content) {
|
||||
return array_shift($content);
|
||||
|
@ -1,79 +0,0 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||
|
||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
||||
|
||||
require_once __DIR__ . '/DummyBlockRenderer.php';
|
||||
|
||||
class BlocksRendererTest extends \MailPoetTest {
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
add_action('mailpoet_blocks_renderer_initialized', [$this, 'registerDummyBlock']);
|
||||
}
|
||||
|
||||
public function testItRendersContentForRegisteredBlocks() {
|
||||
$renderer = $this->getBlocksRenderer();
|
||||
$content = $renderer->render([
|
||||
[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerHTML' => 'Hello',
|
||||
],
|
||||
[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerHTML' => 'Buddy!',
|
||||
],
|
||||
]);
|
||||
verify($content)->equals('HelloBuddy!');
|
||||
}
|
||||
|
||||
public function testItSkipsUnknownBlocks() {
|
||||
$renderer = $this->getBlocksRenderer();
|
||||
$content = $renderer->render([
|
||||
[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerHTML' => 'Hello',
|
||||
],
|
||||
[
|
||||
'blockName' => 'unknown/block',
|
||||
'innerHTML' => 'Buddy!',
|
||||
],
|
||||
]);
|
||||
verify($content)->equals('Hello');
|
||||
}
|
||||
|
||||
public function testItCanProcessNestedBlocks() {
|
||||
$renderer = $this->getBlocksRenderer();
|
||||
$content = $renderer->render([
|
||||
[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerBlocks' => [[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerHTML' => 'Hello',
|
||||
],
|
||||
[
|
||||
'blockName' => 'dummy/block',
|
||||
'innerHTML' => 'Buddy!',
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
verify($content)->equals('[HelloBuddy!]');
|
||||
}
|
||||
|
||||
public function _after() {
|
||||
parent::_after();
|
||||
remove_action('mailpoet_blocks_renderer_initialized', [$this, 'postRegisterCallback']);
|
||||
}
|
||||
|
||||
public function registerDummyBlock(BlocksRegistry $registry) {
|
||||
$registry->addBlockRenderer('dummy/block', new DummyBlockRenderer());
|
||||
}
|
||||
|
||||
private function getBlocksRenderer() {
|
||||
return new BlocksRenderer(
|
||||
new BlocksRegistry(),
|
||||
new SettingsController()
|
||||
);
|
||||
}
|
||||
}
|
@ -2,14 +2,12 @@
|
||||
|
||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||
|
||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
||||
|
||||
class DummyBlockRenderer implements BlockRenderer {
|
||||
public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string {
|
||||
public function render(string $blockContent, array $parsedBlock): string {
|
||||
if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) {
|
||||
return $parsedBlock['innerHTML'];
|
||||
}
|
||||
// Wrapper is rendered in parent Columns block because it needs to operate with columns count etc.
|
||||
return '[' . $blocksRenderer->render($parsedBlock['innerBlocks']) . ']';
|
||||
return '[' . $this->render('', $parsedBlock['innerBlocks']) . ']';
|
||||
}
|
||||
}
|
||||
|
@ -72,23 +72,23 @@ class RendererTest extends \MailPoetTest {
|
||||
}
|
||||
$this->assertInstanceOf(\DOMElement::class, $body);
|
||||
$style = $body->getAttribute('style');
|
||||
verify($style)->stringContainsString('font-family:Arial,\'Helvetica Neue\',Helvetica,sans-serif;');
|
||||
verify($style)->stringContainsString('margin:0;padding:0;');
|
||||
}
|
||||
|
||||
public function testItAppliesLayoutStyles() {
|
||||
$settingsControllerMock = $this->createMock(SettingsController::class);
|
||||
$settingsControllerMock->method('getEmailLayoutStyles')->willReturn([
|
||||
'width' => 123,
|
||||
'width' => '123px',
|
||||
'background' => '#123456',
|
||||
'padding' => [
|
||||
'left' => 1,
|
||||
'right' => 2,
|
||||
'top' => 3,
|
||||
'bottom' => 4,
|
||||
'left' => '1px',
|
||||
'right' => '2px',
|
||||
'top' => '3px',
|
||||
'bottom' => '4px',
|
||||
],
|
||||
]);
|
||||
$renderer = $this->getServiceWithOverrides(Renderer::class, [
|
||||
'stylesController' => $settingsControllerMock,
|
||||
'settingsController' => $settingsControllerMock,
|
||||
]);
|
||||
$rendered = $renderer->render($this->emailPost, 'Subject', '', 'en');
|
||||
$doc = new \DOMDocument();
|
||||
|
@ -3,13 +3,8 @@
|
||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||
|
||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
||||
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
|
||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
||||
|
||||
class ColumnsTest extends \MailPoetTest {
|
||||
/** @var BlocksRenderer */
|
||||
private $blocksRenderer;
|
||||
|
||||
/** @var Columns */
|
||||
private $columnsRenderer;
|
||||
|
||||
@ -17,6 +12,9 @@ class ColumnsTest extends \MailPoetTest {
|
||||
private $parsedColumns = [
|
||||
'blockName' => 'core/columns',
|
||||
'attrs' => [],
|
||||
'email_attrs' => [
|
||||
'width' => '784px',
|
||||
],
|
||||
'innerBlocks' => [
|
||||
0 => [
|
||||
'blockName' => 'core/column',
|
||||
@ -44,31 +42,12 @@ class ColumnsTest extends \MailPoetTest {
|
||||
|
||||
public function _before() {
|
||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
||||
$this->blocksRenderer = $this->diContainer->get(BlocksRenderer::class);
|
||||
$this->columnsRenderer = new Columns();
|
||||
}
|
||||
|
||||
public function testItRendersInnerColumn() {
|
||||
$settingsController = $this->diContainer->get(SettingsController::class);
|
||||
$rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController);
|
||||
$rendered = $this->columnsRenderer->render('', $this->parsedColumns);
|
||||
verify($rendered)->stringContainsString('Column 1');
|
||||
}
|
||||
|
||||
public function testItRendersWidthForOneColumn() {
|
||||
$settingsController = $this->createMock(SettingsController::class);
|
||||
$settingsController->method('getEmailLayoutStyles')
|
||||
->willReturn(['width' => 800]);
|
||||
$rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController);
|
||||
verify($rendered)->stringContainsString('width:784px;');
|
||||
}
|
||||
|
||||
public function testItRendersWidthForTwoColumns() {
|
||||
$settingsController = $this->createMock(SettingsController::class);
|
||||
$settingsController->method('getEmailLayoutStyles')
|
||||
->willReturn(['width' => 800]);
|
||||
$parsedColumns = $this->parsedColumns;
|
||||
$parsedColumns['innerBlocks'][] = $parsedColumns['innerBlocks'][0]; // Insert another column
|
||||
$rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $settingsController);
|
||||
verify($rendered)->stringContainsString('width:392px;');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user