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\TopLevelPreprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TypographyPreprocessor::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\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\BlocksRegistry::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\PreprocessManager::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\PreprocessManager::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::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 */
|
/** @var \MailPoetVendor\CSS */
|
||||||
private $cssInliner;
|
private $cssInliner;
|
||||||
|
|
||||||
/** @var BlocksRenderer */
|
/** @var BlocksRegistry */
|
||||||
private $blocksRenderer;
|
private $blocksRegistry;
|
||||||
|
|
||||||
/** @var PreprocessManager */
|
/** @var PreprocessManager */
|
||||||
private $preprocessManager;
|
private $preprocessManager;
|
||||||
@ -29,12 +29,12 @@ class Renderer {
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
\MailPoetVendor\CSS $cssInliner,
|
\MailPoetVendor\CSS $cssInliner,
|
||||||
PreprocessManager $preprocessManager,
|
PreprocessManager $preprocessManager,
|
||||||
BlocksRenderer $blocksRenderer,
|
BlocksRegistry $blocksRegistry,
|
||||||
SettingsController $settingsController
|
SettingsController $settingsController
|
||||||
) {
|
) {
|
||||||
$this->cssInliner = $cssInliner;
|
$this->cssInliner = $cssInliner;
|
||||||
$this->preprocessManager = $preprocessManager;
|
$this->preprocessManager = $preprocessManager;
|
||||||
$this->blocksRenderer = $blocksRenderer;
|
$this->blocksRegistry = $blocksRegistry;
|
||||||
$this->settingsController = $settingsController;
|
$this->settingsController = $settingsController;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class Renderer {
|
|||||||
|
|
||||||
$layoutStyles = $this->settingsController->getEmailLayoutStyles();
|
$layoutStyles = $this->settingsController->getEmailLayoutStyles();
|
||||||
$parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles);
|
$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 = (string)file_get_contents(dirname(__FILE__) . '/' . self::TEMPLATE_STYLES_FILE);
|
||||||
$styles = apply_filters('mailpoet_email_renderer_styles', $styles, $post);
|
$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) {
|
private function injectContentIntoTemplate($template, array $content) {
|
||||||
return preg_replace_callback('/{{\w+}}/', function($matches) use (&$content) {
|
return preg_replace_callback('/{{\w+}}/', function($matches) use (&$content) {
|
||||||
return array_shift($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;
|
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
|
||||||
|
|
||||||
class DummyBlockRenderer implements BlockRenderer {
|
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'])) {
|
if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) {
|
||||||
return $parsedBlock['innerHTML'];
|
return $parsedBlock['innerHTML'];
|
||||||
}
|
}
|
||||||
// Wrapper is rendered in parent Columns block because it needs to operate with columns count etc.
|
// 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);
|
$this->assertInstanceOf(\DOMElement::class, $body);
|
||||||
$style = $body->getAttribute('style');
|
$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() {
|
public function testItAppliesLayoutStyles() {
|
||||||
$settingsControllerMock = $this->createMock(SettingsController::class);
|
$settingsControllerMock = $this->createMock(SettingsController::class);
|
||||||
$settingsControllerMock->method('getEmailLayoutStyles')->willReturn([
|
$settingsControllerMock->method('getEmailLayoutStyles')->willReturn([
|
||||||
'width' => 123,
|
'width' => '123px',
|
||||||
'background' => '#123456',
|
'background' => '#123456',
|
||||||
'padding' => [
|
'padding' => [
|
||||||
'left' => 1,
|
'left' => '1px',
|
||||||
'right' => 2,
|
'right' => '2px',
|
||||||
'top' => 3,
|
'top' => '3px',
|
||||||
'bottom' => 4,
|
'bottom' => '4px',
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$renderer = $this->getServiceWithOverrides(Renderer::class, [
|
$renderer = $this->getServiceWithOverrides(Renderer::class, [
|
||||||
'stylesController' => $settingsControllerMock,
|
'settingsController' => $settingsControllerMock,
|
||||||
]);
|
]);
|
||||||
$rendered = $renderer->render($this->emailPost, 'Subject', '', 'en');
|
$rendered = $renderer->render($this->emailPost, 'Subject', '', 'en');
|
||||||
$doc = new \DOMDocument();
|
$doc = new \DOMDocument();
|
||||||
|
@ -3,13 +3,8 @@
|
|||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\EmailEditor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
|
||||||
|
|
||||||
class ColumnsTest extends \MailPoetTest {
|
class ColumnsTest extends \MailPoetTest {
|
||||||
/** @var BlocksRenderer */
|
|
||||||
private $blocksRenderer;
|
|
||||||
|
|
||||||
/** @var Columns */
|
/** @var Columns */
|
||||||
private $columnsRenderer;
|
private $columnsRenderer;
|
||||||
|
|
||||||
@ -17,6 +12,9 @@ class ColumnsTest extends \MailPoetTest {
|
|||||||
private $parsedColumns = [
|
private $parsedColumns = [
|
||||||
'blockName' => 'core/columns',
|
'blockName' => 'core/columns',
|
||||||
'attrs' => [],
|
'attrs' => [],
|
||||||
|
'email_attrs' => [
|
||||||
|
'width' => '784px',
|
||||||
|
],
|
||||||
'innerBlocks' => [
|
'innerBlocks' => [
|
||||||
0 => [
|
0 => [
|
||||||
'blockName' => 'core/column',
|
'blockName' => 'core/column',
|
||||||
@ -44,31 +42,12 @@ class ColumnsTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(EmailEditor::class)->initialize();
|
||||||
$this->blocksRenderer = $this->diContainer->get(BlocksRenderer::class);
|
|
||||||
$this->columnsRenderer = new Columns();
|
$this->columnsRenderer = new Columns();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersInnerColumn() {
|
public function testItRendersInnerColumn() {
|
||||||
$settingsController = $this->diContainer->get(SettingsController::class);
|
$rendered = $this->columnsRenderer->render('', $this->parsedColumns);
|
||||||
$rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController);
|
|
||||||
verify($rendered)->stringContainsString('Column 1');
|
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;');
|
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