Merge StylesController to SettingsController

[MAILPOET-5591]
This commit is contained in:
Jan Lysý
2023-10-19 19:01:12 +02:00
committed by Jan Lysý
parent 1626cf2ad9
commit 0ac72d43e6
15 changed files with 121 additions and 136 deletions

View File

@@ -344,7 +344,6 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer::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\Engine\StylesController::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailApiController::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailApiController::class)->setPublic(true);

View File

@@ -5,13 +5,13 @@ namespace MailPoet\EmailEditor\Engine;
use MailPoet\Validator\Builder; use MailPoet\Validator\Builder;
class EmailApiController { class EmailApiController {
/** @var StylesController */ /** @var SettingsController */
private $stylesController; private $settingsController;
public function __construct( public function __construct(
StylesController $stylesController SettingsController $settingsController
) { ) {
$this->stylesController = $stylesController; $this->settingsController = $settingsController;
} }
/** /**
@@ -19,7 +19,7 @@ class EmailApiController {
*/ */
public function getEmailData(): array { public function getEmailData(): array {
return [ return [
'layout_styles' => $this->stylesController->getEmailLayoutStyles(), 'layout_styles' => $this->settingsController->getEmailLayoutStyles(),
]; ];
} }

View File

@@ -2,8 +2,8 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
interface BlockRenderer { interface BlockRenderer {
public function render(array $parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string; public function render(array $parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string;
} }

View File

@@ -2,25 +2,25 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class BlocksRenderer { class BlocksRenderer {
/** @var BlocksRegistry */ /** @var BlocksRegistry */
private $blockRenderersRegistry; private $blockRenderersRegistry;
/** @var StylesController */ /** @var SettingsController */
private $stylesController; private $settingsController;
/** @var bool */ /** @var bool */
private $blocksInitialized = false; private $blocksInitialized = false;
public function __construct( public function __construct(
BlocksRegistry $blockRenderersRegistry, BlocksRegistry $blockRenderersRegistry,
StylesController $stylesController SettingsController $settingsController
) { ) {
$this->blockRenderersRegistry = $blockRenderersRegistry; $this->blockRenderersRegistry = $blockRenderersRegistry;
$this->stylesController = $stylesController; $this->settingsController = $settingsController;
} }
public function render(array $parsedBlocks): string { public function render(array $parsedBlocks): string {
@@ -35,7 +35,7 @@ class BlocksRenderer {
if (!$blockRenderer) { if (!$blockRenderer) {
continue; continue;
} }
$content .= $blockRenderer->render($parsedBlock, $this, $this->stylesController); $content .= $blockRenderer->render($parsedBlock, $this, $this->settingsController);
} }
return $content; return $content;
} }

View File

@@ -2,7 +2,7 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
use MailPoet\Util\pQuery\DomNode; use MailPoet\Util\pQuery\DomNode;
use MailPoetVendor\Html2Text\Html2Text; use MailPoetVendor\Html2Text\Html2Text;
@@ -17,8 +17,8 @@ class Renderer {
/** @var PreprocessManager */ /** @var PreprocessManager */
private $preprocessManager; private $preprocessManager;
/** @var StylesController */ /** @var SettingsController */
private $stylesController; private $settingsController;
const TEMPLATE_FILE = 'template.html'; const TEMPLATE_FILE = 'template.html';
const TEMPLATE_STYLES_FILE = 'styles.css'; const TEMPLATE_STYLES_FILE = 'styles.css';
@@ -30,19 +30,19 @@ class Renderer {
\MailPoetVendor\CSS $cssInliner, \MailPoetVendor\CSS $cssInliner,
PreprocessManager $preprocessManager, PreprocessManager $preprocessManager,
BlocksRenderer $blocksRenderer, BlocksRenderer $blocksRenderer,
StylesController $stylesController SettingsController $settingsController
) { ) {
$this->cssInliner = $cssInliner; $this->cssInliner = $cssInliner;
$this->preprocessManager = $preprocessManager; $this->preprocessManager = $preprocessManager;
$this->blocksRenderer = $blocksRenderer; $this->blocksRenderer = $blocksRenderer;
$this->stylesController = $stylesController; $this->settingsController = $settingsController;
} }
public function render(\WP_Post $post, string $subject, string $preHeader, string $language, $metaRobots = ''): array { public function render(\WP_Post $post, string $subject, string $preHeader, string $language, $metaRobots = ''): array {
$parser = new \WP_Block_Parser(); $parser = new \WP_Block_Parser();
$parsedBlocks = $parser->parse($post->post_content); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps $parsedBlocks = $parser->parse($post->post_content); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
$layoutStyles = $this->stylesController->getEmailLayoutStyles(); $layoutStyles = $this->settingsController->getEmailLayoutStyles();
$parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles); $parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles);
$renderedBody = $this->blocksRenderer->render($parsedBlocks); $renderedBody = $this->blocksRenderer->render($parsedBlocks);

View File

@@ -28,14 +28,66 @@ class SettingsController {
], ],
]; ];
/** @var StylesController */ /**
private $stylesController; * Width of the email in pixels.
* @var string
*/
const EMAIL_WIDTH = '660px';
public function __construct( /**
StylesController $stylesController * Width of the email in pixels.
) { * @var string
$this->stylesController = $stylesController; */
} const EMAIL_BACKGROUND = '#cccccc';
/**
* Padding of the email in pixels.
* @var string
*/
const EMAIL_PADDING = '10px';
/**
* Default styles applied to the email. These are going to be replaced by style settings.
* This is currently more af a proof of concept that we can apply styles to the email.
* We will gradually replace these hardcoded values with styles saved as global styles or styles saved with the email.
* @var array
*/
const DEFAULT_EMAIL_CONTENT_STYLES = [
'typography' => [
'fontFamily' => "Arial, 'Helvetica Neue', Helvetica, sans-serif",
'fontSize' => '16px',
],
'h1' => [
'typography' => [
'fontSize' => '32px',
],
],
'h2' => [
'typography' => [
'fontSize' => '24px',
],
],
'h3' => [
'typography' => [
'fontSize' => '18px',
],
],
'h4' => [
'typography' => [
'fontSize' => '16px',
],
],
'h5' => [
'typography' => [
'fontSize' => '14px',
],
],
'h6' => [
'typography' => [
'fontSize' => '12px',
],
],
];
public function getSettings(): array { public function getSettings(): array {
$coreDefaultSettings = get_default_block_editor_settings(); $coreDefaultSettings = get_default_block_editor_settings();
@@ -48,9 +100,29 @@ class SettingsController {
$settings = array_merge($coreDefaultSettings, self::DEFAULT_SETTINGS); $settings = array_merge($coreDefaultSettings, self::DEFAULT_SETTINGS);
$settings['allowedBlockTypes'] = self::ALLOWED_BLOCK_TYPES; $settings['allowedBlockTypes'] = self::ALLOWED_BLOCK_TYPES;
$settings['defaultEditorStyles'] = [[ 'css' => $this->stylesController->getEmailContentStyles() ]]; $settings['defaultEditorStyles'] = [[ 'css' => $this->getEmailContentStyles() ]];
$settings['__experimentalFeatures'] = $coreSettings; $settings['__experimentalFeatures'] = $coreSettings;
return $settings; return $settings;
} }
public function getEmailContentStyles(): array {
return self::DEFAULT_EMAIL_CONTENT_STYLES;
}
/**
* @return array{width: string, background: string, padding: array{bottom: string, left: string, right: string, top: string}}
*/
public function getEmailLayoutStyles(): array {
return [
'width' => self::EMAIL_WIDTH,
'background' => self::EMAIL_BACKGROUND,
'padding' => [
'bottom' => self::EMAIL_PADDING,
'left' => self::EMAIL_PADDING,
'right' => self::EMAIL_PADDING,
'top' => self::EMAIL_PADDING,
],
];
}
} }

View File

@@ -1,86 +0,0 @@
<?php declare(strict_types = 1);
namespace MailPoet\EmailEditor\Engine;
class StylesController {
/**
* Width of the email in pixels.
* @var string
*/
const EMAIL_WIDTH = '660px';
/**
* Width of the email in pixels.
* @var string
*/
const EMAIL_BACKGROUND = '#cccccc';
/**
* Padding of the email in pixels.
* @var string
*/
const EMAIL_PADDING = '10px';
/**
* Default styles applied to the email. These are going to be replaced by style settings.
* This is currently more af a proof of concept that we can apply styles to the email.
* We will gradually replace these hardcoded values with styles saved as global styles or styles saved with the email.
* @var array
*/
const DEFAULT_EMAIL_CONTENT_STYLES = [
'typography' => [
'fontFamily' => "Arial, 'Helvetica Neue', Helvetica, sans-serif",
'fontSize' => '16px',
],
'h1' => [
'typography' => [
'fontSize' => '32px',
],
],
'h2' => [
'typography' => [
'fontSize' => '24px',
],
],
'h3' => [
'typography' => [
'fontSize' => '18px',
],
],
'h4' => [
'typography' => [
'fontSize' => '16px',
],
],
'h5' => [
'typography' => [
'fontSize' => '14px',
],
],
'h6' => [
'typography' => [
'fontSize' => '12px',
],
],
];
public function getEmailContentStyles(): array {
return self::DEFAULT_EMAIL_CONTENT_STYLES;
}
/**
* @return array{width: string, background: string, padding: array{bottom: string, left: string, right: string, top: string}}
*/
public function getEmailLayoutStyles(): array {
return [
'width' => self::EMAIL_WIDTH,
'background' => self::EMAIL_BACKGROUND,
'padding' => [
'bottom' => self::EMAIL_PADDING,
'left' => self::EMAIL_PADDING,
'right' => self::EMAIL_PADDING,
'top' => self::EMAIL_PADDING,
],
];
}
}

View File

@@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer;
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class Column implements BlockRenderer { class Column implements BlockRenderer {
public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string {

View File

@@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer;
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class Columns implements BlockRenderer { class Columns implements BlockRenderer {
public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string {

View File

@@ -4,10 +4,10 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer;
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class Heading implements BlockRenderer { class Heading implements BlockRenderer {
public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string {
return $parsedBlock['innerHTML'] ?? ''; return $parsedBlock['innerHTML'] ?? '';
} }
} }

View File

@@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer;
use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class Paragraph implements BlockRenderer { class Paragraph implements BlockRenderer {
public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string {

View File

@@ -2,7 +2,7 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
require_once __DIR__ . '/DummyBlockRenderer.php'; require_once __DIR__ . '/DummyBlockRenderer.php';
@@ -73,7 +73,7 @@ class BlocksRendererTest extends \MailPoetTest {
private function getBlocksRenderer() { private function getBlocksRenderer() {
return new BlocksRenderer( return new BlocksRenderer(
new BlocksRegistry(), new BlocksRegistry(),
new StylesController() new SettingsController()
); );
} }
} }

View File

@@ -2,10 +2,10 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class DummyBlockRenderer implements BlockRenderer { class DummyBlockRenderer implements BlockRenderer {
public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string {
if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) { if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) {
return $parsedBlock['innerHTML']; return $parsedBlock['innerHTML'];
} }

View File

@@ -3,7 +3,7 @@
namespace MailPoet\EmailEditor\Engine\Renderer; namespace MailPoet\EmailEditor\Engine\Renderer;
use MailPoet\EmailEditor\Engine\EmailEditor; use MailPoet\EmailEditor\Engine\EmailEditor;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
require_once __DIR__ . '/DummyBlockRenderer.php'; require_once __DIR__ . '/DummyBlockRenderer.php';
@@ -76,8 +76,8 @@ class RendererTest extends \MailPoetTest {
} }
public function testItAppliesLayoutStyles() { public function testItAppliesLayoutStyles() {
$stylesControllerMock = $this->createMock(StylesController::class); $settingsControllerMock = $this->createMock(SettingsController::class);
$stylesControllerMock->method('getEmailLayoutStyles')->willReturn([ $settingsControllerMock->method('getEmailLayoutStyles')->willReturn([
'width' => 123, 'width' => 123,
'background' => '#123456', 'background' => '#123456',
'padding' => [ 'padding' => [
@@ -88,7 +88,7 @@ class RendererTest extends \MailPoetTest {
], ],
]); ]);
$renderer = $this->getServiceWithOverrides(Renderer::class, [ $renderer = $this->getServiceWithOverrides(Renderer::class, [
'stylesController' => $stylesControllerMock, 'stylesController' => $settingsControllerMock,
]); ]);
$rendered = $renderer->render($this->emailPost, 'Subject', '', 'en'); $rendered = $renderer->render($this->emailPost, 'Subject', '', 'en');
$doc = new \DOMDocument(); $doc = new \DOMDocument();

View File

@@ -4,7 +4,7 @@ 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\Renderer\BlocksRenderer;
use MailPoet\EmailEditor\Engine\StylesController; use MailPoet\EmailEditor\Engine\SettingsController;
class ColumnsTest extends \MailPoetTest { class ColumnsTest extends \MailPoetTest {
/** @var BlocksRenderer */ /** @var BlocksRenderer */
@@ -49,26 +49,26 @@ class ColumnsTest extends \MailPoetTest {
} }
public function testItRendersInnerColumn() { public function testItRendersInnerColumn() {
$stylesController = $this->diContainer->get(StylesController::class); $settingsController = $this->diContainer->get(SettingsController::class);
$rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $stylesController); $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController);
verify($rendered)->stringContainsString('Column 1'); verify($rendered)->stringContainsString('Column 1');
} }
public function testItRendersWidthForOneColumn() { public function testItRendersWidthForOneColumn() {
$stylesController = $this->createMock(StylesController::class); $settingsController = $this->createMock(SettingsController::class);
$stylesController->method('getEmailLayoutStyles') $settingsController->method('getEmailLayoutStyles')
->willReturn(['width' => 800]); ->willReturn(['width' => 800]);
$rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $stylesController); $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController);
verify($rendered)->stringContainsString('width:784px;'); verify($rendered)->stringContainsString('width:784px;');
} }
public function testItRendersWidthForTwoColumns() { public function testItRendersWidthForTwoColumns() {
$stylesController = $this->createMock(StylesController::class); $settingsController = $this->createMock(SettingsController::class);
$stylesController->method('getEmailLayoutStyles') $settingsController->method('getEmailLayoutStyles')
->willReturn(['width' => 800]); ->willReturn(['width' => 800]);
$parsedColumns = $this->parsedColumns; $parsedColumns = $this->parsedColumns;
$parsedColumns['innerBlocks'][] = $parsedColumns['innerBlocks'][0]; // Insert another column $parsedColumns['innerBlocks'][] = $parsedColumns['innerBlocks'][0]; // Insert another column
$rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $stylesController); $rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $settingsController);
verify($rendered)->stringContainsString('width:392px;'); verify($rendered)->stringContainsString('width:392px;');
} }
} }