Rename files in email editor package by WP Coding Standard
[MAILPOET-6240]
This commit is contained in:
@ -42,7 +42,8 @@
|
|||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"lib-3rd-party",
|
"lib-3rd-party",
|
||||||
"vendor-prefixed"
|
"vendor-prefixed",
|
||||||
|
"vendor/mailpoet/email-editor/src"
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
"lib/exceptions.php",
|
"lib/exceptions.php",
|
||||||
|
@ -6,8 +6,8 @@ use MailPoet\API\JSON\API;
|
|||||||
use MailPoet\Config\Env;
|
use MailPoet\Config\Env;
|
||||||
use MailPoet\Config\Installer;
|
use MailPoet\Config\Installer;
|
||||||
use MailPoet\Config\ServicesChecker;
|
use MailPoet\Config\ServicesChecker;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor as EditorInitController;
|
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor as EditorInitController;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Settings\SettingsController as MailPoetSettings;
|
use MailPoet\Settings\SettingsController as MailPoetSettings;
|
||||||
@ -18,9 +18,9 @@ use MailPoet\WP\Functions as WPFunctions;
|
|||||||
class EmailEditor {
|
class EmailEditor {
|
||||||
private WPFunctions $wp;
|
private WPFunctions $wp;
|
||||||
|
|
||||||
private SettingsController $settingsController;
|
private Settings_Controller $settingsController;
|
||||||
|
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
|
|
||||||
private CdnAssetUrl $cdnAssetUrl;
|
private CdnAssetUrl $cdnAssetUrl;
|
||||||
|
|
||||||
@ -34,11 +34,11 @@ class EmailEditor {
|
|||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
SettingsController $settingsController,
|
Settings_Controller $settingsController,
|
||||||
CdnAssetUrl $cdnAssetUrl,
|
CdnAssetUrl $cdnAssetUrl,
|
||||||
ServicesChecker $servicesChecker,
|
ServicesChecker $servicesChecker,
|
||||||
SubscribersFeature $subscribersFeature,
|
SubscribersFeature $subscribersFeature,
|
||||||
ThemeController $themeController,
|
Theme_Controller $themeController,
|
||||||
MailPoetSettings $mailpoetSettings,
|
MailPoetSettings $mailpoetSettings,
|
||||||
NewslettersRepository $newslettersRepository
|
NewslettersRepository $newslettersRepository
|
||||||
) {
|
) {
|
||||||
|
@ -11,7 +11,7 @@ use MailPoet\Automation\Integrations\MailPoet\MailPoetIntegration;
|
|||||||
use MailPoet\Automation\Integrations\WooCommerce\WooCommerceIntegration;
|
use MailPoet\Automation\Integrations\WooCommerce\WooCommerceIntegration;
|
||||||
use MailPoet\Cron\CronTrigger;
|
use MailPoet\Cron\CronTrigger;
|
||||||
use MailPoet\Cron\DaemonActionSchedulerRunner;
|
use MailPoet\Cron\DaemonActionSchedulerRunner;
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Initializer as CoreEmailEditorIntegration;
|
use MailPoet\EmailEditor\Integrations\Core\Initializer as CoreEmailEditorIntegration;
|
||||||
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
||||||
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor as MailpoetEmailEditorIntegration;
|
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor as MailpoetEmailEditorIntegration;
|
||||||
@ -120,7 +120,7 @@ class Initializer {
|
|||||||
/** @var DaemonActionSchedulerRunner */
|
/** @var DaemonActionSchedulerRunner */
|
||||||
private $actionSchedulerRunner;
|
private $actionSchedulerRunner;
|
||||||
|
|
||||||
/** @var EmailEditor */
|
/** @var Email_Editor */
|
||||||
private $emailEditor;
|
private $emailEditor;
|
||||||
|
|
||||||
/** @var MailpoetEmailEditorIntegration */
|
/** @var MailpoetEmailEditorIntegration */
|
||||||
@ -171,7 +171,7 @@ class Initializer {
|
|||||||
WooCommerceIntegration $woocommerceIntegration,
|
WooCommerceIntegration $woocommerceIntegration,
|
||||||
PersonalDataExporters $personalDataExporters,
|
PersonalDataExporters $personalDataExporters,
|
||||||
DaemonActionSchedulerRunner $actionSchedulerRunner,
|
DaemonActionSchedulerRunner $actionSchedulerRunner,
|
||||||
EmailEditor $emailEditor,
|
Email_Editor $emailEditor,
|
||||||
BlockTypesController $blockTypesController,
|
BlockTypesController $blockTypesController,
|
||||||
MailpoetEmailEditorIntegration $mailpoetEmailEditorIntegration,
|
MailpoetEmailEditorIntegration $mailpoetEmailEditorIntegration,
|
||||||
CoreEmailEditorIntegration $coreEmailEditorIntegration,
|
CoreEmailEditorIntegration $coreEmailEditorIntegration,
|
||||||
|
@ -337,27 +337,27 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class);
|
$container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class);
|
||||||
$container->autowire(\MailPoet\CustomFields\CustomFieldsRepository::class)->setPublic(true);
|
$container->autowire(\MailPoet\CustomFields\CustomFieldsRepository::class)->setPublic(true);
|
||||||
// Email Editor
|
// Email Editor
|
||||||
$container->autowire(\MailPoet\EmailEditor\Utils\CdnAssetUrl::class)
|
$container->autowire(\MailPoet\EmailEditor\Utils\Cdn_Asset_Url::class)
|
||||||
->setPublic(true)
|
->setPublic(true)
|
||||||
->setFactory([__CLASS__, 'getEmailEditorCdnAssetsUrl']);
|
->setFactory([__CLASS__, 'getEmailEditorCdnAssetsUrl']);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\EmailEditor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Email_Editor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\EmailApiController::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Email_Api_Controller::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\SettingsController::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Settings_Controller::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\ThemeController::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Theme_Controller::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\HighlightingPostprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Highlighting_Postprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\VariablesPostprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Variables_Postprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\BlocksWidthPreprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Blocks_Width_Preprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\CleanupPreprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Cleanup_Preprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\SpacingPreprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Spacing_Preprocessor::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\TypographyPreprocessor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Typography_Preprocessor::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\Templates\Templates::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Templates\Templates::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Templates\Utils::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Templates\Utils::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Templates\TemplatePreview::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Templates\Template_Preview::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Patterns\Patterns::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Patterns\Patterns::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ContentRenderer::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Content_Renderer::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlocksRegistry::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Blocks_Registry::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ProcessManager::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Process_Manager::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\Cli::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\Cli::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor::class)->setPublic(true);
|
$container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor::class)->setPublic(true);
|
||||||
@ -689,7 +689,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
return new \MailPoet\Util\CdnAssetUrl((string)Env::$baseUrl);
|
return new \MailPoet\Util\CdnAssetUrl((string)Env::$baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getEmailEditorCdnAssetsUrl(): \MailPoet\EmailEditor\Utils\CdnAssetUrl {
|
public static function getEmailEditorCdnAssetsUrl(): \MailPoet\EmailEditor\Utils\Cdn_Asset_Url {
|
||||||
return new \MailPoet\EmailEditor\Utils\CdnAssetUrl((string)Env::$baseUrl);
|
return new \MailPoet\EmailEditor\Utils\Cdn_Asset_Url((string)Env::$baseUrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ class EmailEditorTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItRegistersMailPoetEmailPostType() {
|
public function testItRegistersMailPoetEmailPostType() {
|
||||||
$this->emailEditor->initialize();
|
$this->emailEditor->initialize();
|
||||||
$this->diContainer->get(\MailPoet\EmailEditor\Engine\EmailEditor::class)->initialize();
|
$this->diContainer->get(\MailPoet\EmailEditor\Engine\Email_Editor::class)->initialize();
|
||||||
$postTypes = get_post_types();
|
$postTypes = get_post_types();
|
||||||
$this->assertArrayHasKey('mailpoet_email', $postTypes);
|
$this->assertArrayHasKey('mailpoet_email', $postTypes);
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
"description": "Email editor based on WordPress Gutenberg package.",
|
"description": "Email editor based on WordPress Gutenberg package.",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"classmap": [
|
||||||
"MailPoet\\EmailEditor\\": "src/"
|
"src/"
|
||||||
}
|
]
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"classmap": [
|
||||||
"MailPoet\\EmailEditor\\": "tests/unit/"
|
"tests/unit/"
|
||||||
}
|
]
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.4"
|
"php": ">=7.4"
|
||||||
@ -28,6 +28,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"unit-test": "vendor/bin/codecept run unit",
|
"unit-test": "vendor/bin/codecept run unit",
|
||||||
"integration-test": "cd ../../../tests_env/docker && COMPOSE_HTTP_TIMEOUT=200 docker compose run -e SKIP_DEPS=1 -e SKIP_PLUGINS=1 -e PACKAGE_NAME=email-editor codeception_integration"
|
"integration-test": "cd ../../../tests_env/docker && COMPOSE_HTTP_TIMEOUT=200 docker compose run -e SKIP_DEPS=1 -e SKIP_PLUGINS=1 -e PACKAGE_NAME=email-editor codeception_integration",
|
||||||
|
"code-style": "../../../mailpoet/tasks/code_sniffer/vendor/bin/phpcs -ps --standard=WordPress src/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Utils\CdnAssetUrl;
|
use MailPoet\EmailEditor\Utils\Cdn_Asset_Url;
|
||||||
|
|
||||||
abstract class AbstractPattern {
|
abstract class Abstract_Pattern {
|
||||||
protected $cdnAssetUrl;
|
protected $cdnAssetUrl;
|
||||||
protected $blockTypes = [];
|
protected $blockTypes = [];
|
||||||
protected $templateTypes = [];
|
protected $templateTypes = [];
|
||||||
@ -14,7 +14,7 @@ abstract class AbstractPattern {
|
|||||||
protected $viewportWidth = 620;
|
protected $viewportWidth = 620;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
CdnAssetUrl $cdnAssetUrl
|
Cdn_Asset_Url $cdnAssetUrl
|
||||||
) {
|
) {
|
||||||
$this->cdnAssetUrl = $cdnAssetUrl;
|
$this->cdnAssetUrl = $cdnAssetUrl;
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
||||||
|
|
||||||
class DefaultContentFull extends AbstractPattern {
|
class Default_Content_Full extends Abstract_Pattern {
|
||||||
protected $blockTypes = [
|
protected $blockTypes = [
|
||||||
'core/post-content',
|
'core/post-content',
|
||||||
];
|
];
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
namespace MailPoet\EmailEditor\Engine\Patterns\Library;
|
||||||
|
|
||||||
class DefaultContent extends AbstractPattern {
|
class Default_Content extends Abstract_Pattern {
|
||||||
protected $blockTypes = [
|
protected $blockTypes = [
|
||||||
'core/post-content',
|
'core/post-content',
|
||||||
];
|
];
|
||||||
@ -11,7 +11,7 @@ class DefaultContent extends AbstractPattern {
|
|||||||
'email-template',
|
'email-template',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected function getContent(): string {
|
protected function getContent(): string
|
||||||
return '
|
return '
|
||||||
<!-- wp:columns {"backgroundColor":"white","style":{"spacing":{"padding":{"top":"var:preset|spacing|20","bottom":"var:preset|spacing|20","left":"var:preset|spacing|20","right":"var:preset|spacing|20"}}}} -->
|
<!-- wp:columns {"backgroundColor":"white","style":{"spacing":{"padding":{"top":"var:preset|spacing|20","bottom":"var:preset|spacing|20","left":"var:preset|spacing|20","right":"var:preset|spacing|20"}}}} -->
|
||||||
<div class="wp-block-columns has-white-background-color has-background" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><!-- wp:column -->
|
<div class="wp-block-columns has-white-background-color has-background" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><!-- wp:column -->
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Patterns;
|
namespace MailPoet\EmailEditor\Engine\Patterns;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Utils\CdnAssetUrl;
|
use MailPoet\EmailEditor\Utils\Cdn_Asset_Url;
|
||||||
|
|
||||||
class Patterns {
|
class Patterns {
|
||||||
private $namespace = 'mailpoet';
|
private $namespace = 'mailpoet';
|
||||||
protected $cdnAssetUrl;
|
protected $cdnAssetUrl;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
CdnAssetUrl $cdnAssetUrl
|
Cdn_Asset_Url $cdnAssetUrl
|
||||||
) {
|
) {
|
||||||
$this->cdnAssetUrl = $cdnAssetUrl;
|
$this->cdnAssetUrl = $cdnAssetUrl;
|
||||||
}
|
}
|
||||||
@ -30,8 +30,8 @@ class Patterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function registerPatterns() {
|
private function registerPatterns() {
|
||||||
$this->registerPattern('default', new Library\DefaultContent($this->cdnAssetUrl));
|
$this->registerPattern('default', new Library\Default_Content($this->cdnAssetUrl));
|
||||||
$this->registerPattern('default-full', new Library\DefaultContentFull($this->cdnAssetUrl));
|
$this->registerPattern('default-full', new Library\Default_Content_Full($this->cdnAssetUrl));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function registerPattern($name, $pattern) {
|
private function registerPattern($name, $pattern) {
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides functionality to render inner blocks of a block that supports reduced flex layout.
|
* This class provides functionality to render inner blocks of a block that supports reduced flex layout.
|
||||||
*/
|
*/
|
||||||
class FlexLayoutRenderer {
|
class Flex_Layout_Renderer {
|
||||||
public function renderInnerBlocksInLayout(array $parsedBlock, SettingsController $settingsController): string {
|
public function renderInnerBlocksInLayout(array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$themeStyles = $settingsController->getEmailStyles();
|
$themeStyles = $settingsController->getEmailStyles();
|
||||||
$flexGap = $themeStyles['spacing']['blockGap'] ?? '0px';
|
$flexGap = $themeStyles['spacing']['blockGap'] ?? '0px';
|
||||||
$flexGapNumber = $settingsController->parseNumberFromStringWithPixels($flexGap);
|
$flexGapNumber = $settingsController->parseNumberFromStringWithPixels($flexGap);
|
||||||
@ -45,7 +45,7 @@ class FlexLayoutRenderer {
|
|||||||
return $outputHtml;
|
return $outputHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function computeWidthsForFlexLayout(array $parsedBlock, SettingsController $settingsController, float $flexGap): array {
|
private function computeWidthsForFlexLayout(array $parsedBlock, Settings_Controller $settingsController, float $flexGap): array {
|
||||||
// When there is no parent width we can't compute widths so auto width will be used
|
// When there is no parent width we can't compute widths so auto width will be used
|
||||||
if (!isset($parsedBlock['email_attrs']['width'])) {
|
if (!isset($parsedBlock['email_attrs']['width'])) {
|
||||||
return $parsedBlock['innerBlocks'] ?? [];
|
return $parsedBlock['innerBlocks'] ?? [];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors;
|
|||||||
/**
|
/**
|
||||||
* This postprocessor replaces <mark> tags with <span> tags because mark tags are not supported across all email clients
|
* This postprocessor replaces <mark> tags with <span> tags because mark tags are not supported across all email clients
|
||||||
*/
|
*/
|
||||||
class HighlightingPostprocessor implements Postprocessor {
|
class Highlighting_Postprocessor implements Postprocessor {
|
||||||
public function postprocess(string $html): string {
|
public function postprocess(string $html): string {
|
||||||
return str_replace(
|
return str_replace(
|
||||||
['<mark', '</mark>'],
|
['<mark', '</mark>'],
|
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In some case the blocks HTML contains CSS variables.
|
* In some case the blocks HTML contains CSS variables.
|
||||||
* For example when spacing is set from a preset the inline styles contain var(--wp--preset--spacing--10), var(--wp--preset--spacing--20) etc.
|
* For example when spacing is set from a preset the inline styles contain var(--wp--preset--spacing--10), var(--wp--preset--spacing--20) etc.
|
||||||
* This postprocessor uses variables from theme.json and replaces the CSS variables with their values in final email HTML.
|
* This postprocessor uses variables from theme.json and replaces the CSS variables with their values in final email HTML.
|
||||||
*/
|
*/
|
||||||
class VariablesPostprocessor implements Postprocessor {
|
class Variables_Postprocessor implements Postprocessor {
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ThemeController $themeController
|
Theme_Controller $themeController
|
||||||
) {
|
) {
|
||||||
$this->themeController = $themeController;
|
$this->themeController = $themeController;
|
||||||
}
|
}
|
@ -6,7 +6,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
|||||||
* This class sets the width of the blocks based on the layout width or column count.
|
* This class sets the width of the blocks based on the layout width or column count.
|
||||||
* The final width in pixels is stored in the email_attrs array because we would like to avoid changing the original attributes.
|
* The final width in pixels is stored in the email_attrs array because we would like to avoid changing the original attributes.
|
||||||
*/
|
*/
|
||||||
class BlocksWidthPreprocessor implements Preprocessor {
|
class Blocks_Width_Preprocessor implements Preprocessor {
|
||||||
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
||||||
foreach ($parsedBlocks as $key => $block) {
|
foreach ($parsedBlocks as $key => $block) {
|
||||||
// Layout width is recalculated for each block because full-width blocks don't exclude padding
|
// Layout width is recalculated for each block because full-width blocks don't exclude padding
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
||||||
|
|
||||||
class CleanupPreprocessor implements Preprocessor {
|
class Cleanup_Preprocessor implements Preprocessor {
|
||||||
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
||||||
foreach ($parsedBlocks as $key => $block) {
|
foreach ($parsedBlocks as $key => $block) {
|
||||||
// https://core.trac.wordpress.org/ticket/45312
|
// https://core.trac.wordpress.org/ticket/45312
|
@ -6,7 +6,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
|||||||
* This preprocessor is responsible for setting default spacing values for blocks.
|
* This preprocessor is responsible for setting default spacing values for blocks.
|
||||||
* In the early development phase, we are setting only margin-top for blocks that are not first or last in the columns block.
|
* In the early development phase, we are setting only margin-top for blocks that are not first or last in the columns block.
|
||||||
*/
|
*/
|
||||||
class SpacingPreprocessor implements Preprocessor {
|
class Spacing_Preprocessor implements Preprocessor {
|
||||||
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
public function preprocess(array $parsedBlocks, array $layout, array $styles): array {
|
||||||
$parsedBlocks = $this->addBlockGaps($parsedBlocks, $styles['spacing']['blockGap'] ?? '', null);
|
$parsedBlocks = $this->addBlockGaps($parsedBlocks, $styles['spacing']['blockGap'] ?? '', null);
|
||||||
return $parsedBlocks;
|
return $parsedBlocks;
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class TypographyPreprocessor implements Preprocessor {
|
class Typography_Preprocessor implements Preprocessor {
|
||||||
/**
|
/**
|
||||||
* List of styles that should be copied from parent to children.
|
* List of styles that should be copied from parent to children.
|
||||||
* @var string[]
|
* @var string[]
|
||||||
@ -15,11 +15,11 @@ class TypographyPreprocessor implements Preprocessor {
|
|||||||
'text-decoration',
|
'text-decoration',
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SettingsController $settingsController
|
Settings_Controller $settingsController
|
||||||
) {
|
) {
|
||||||
$this->settingsController = $settingsController;
|
$this->settingsController = $settingsController;
|
||||||
}
|
}
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
interface BlockRenderer {
|
interface Block_Renderer {
|
||||||
public function render(string $blockContent, array $parsedBlock, SettingsController $settingsController): string;
|
public function render(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string;
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
|||||||
|
|
||||||
use WP_Block_Parser;
|
use WP_Block_Parser;
|
||||||
|
|
||||||
class BlocksParser extends WP_Block_Parser {
|
class Blocks_Parser extends WP_Block_Parser {
|
||||||
/**
|
/**
|
||||||
* List of parsed blocks
|
* List of parsed blocks
|
||||||
*
|
*
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
class BlocksRegistry {
|
class Blocks_Registry {
|
||||||
|
|
||||||
/** @var BlockRenderer[] */
|
/** @var Block_Renderer[] */
|
||||||
private $blockRenderersMap = [];
|
private $blockRenderersMap = [];
|
||||||
/** @var BlockRenderer */
|
/** @var BlockRenderer */
|
||||||
private $fallbackRenderer = null;
|
private $fallbackRenderer = null;
|
||||||
|
|
||||||
public function addBlockRenderer(string $blockName, BlockRenderer $renderer): void {
|
public function addBlockRenderer(string $blockName, Block_Renderer $renderer): void {
|
||||||
$this->blockRenderersMap[$blockName] = $renderer;
|
$this->blockRenderersMap[$blockName] = $renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ class BlocksRegistry {
|
|||||||
return isset($this->blockRenderersMap[$blockName]);
|
return isset($this->blockRenderersMap[$blockName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getBlockRenderer(string $blockName): ?BlockRenderer {
|
public function getBlockRenderer(string $blockName): ?Block_Renderer {
|
||||||
return $this->blockRenderersMap[$blockName] ?? null;
|
return $this->blockRenderersMap[$blockName] ?? null;
|
||||||
}
|
}
|
||||||
|
|
@ -2,27 +2,27 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use MailPoetVendor\Pelago\Emogrifier\CssInliner;
|
use MailPoetVendor\Pelago\Emogrifier\CssInliner;
|
||||||
use WP_Block_Template;
|
use WP_Block_Template;
|
||||||
use WP_Post;
|
use WP_Post;
|
||||||
|
|
||||||
class ContentRenderer {
|
class Content_Renderer {
|
||||||
private BlocksRegistry $blocksRegistry;
|
private Blocks_Registry $blocksRegistry;
|
||||||
private ProcessManager $processManager;
|
private Process_Manager $processManager;
|
||||||
private SettingsController $settingsController;
|
private Settings_Controller $settingsController;
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
private $post = null;
|
private $post = null;
|
||||||
private $template = null;
|
private $template = null;
|
||||||
|
|
||||||
const CONTENT_STYLES_FILE = 'content.css';
|
const CONTENT_STYLES_FILE = 'content.css';
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ProcessManager $preprocessManager,
|
Process_Manager $preprocessManager,
|
||||||
BlocksRegistry $blocksRegistry,
|
Blocks_Registry $blocksRegistry,
|
||||||
SettingsController $settingsController,
|
Settings_Controller $settingsController,
|
||||||
ThemeController $themeController
|
Theme_Controller $themeController
|
||||||
) {
|
) {
|
||||||
$this->processManager = $preprocessManager;
|
$this->processManager = $preprocessManager;
|
||||||
$this->blocksRegistry = $blocksRegistry;
|
$this->blocksRegistry = $blocksRegistry;
|
||||||
@ -50,7 +50,7 @@ class ContentRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function blockParser() {
|
public function blockParser() {
|
||||||
return 'MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlocksParser';
|
return 'MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Blocks_Parser';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preprocessParsedBlocks(array $parsedBlocks): array {
|
public function preprocessParsedBlocks(array $parsedBlocks): array {
|
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\HighlightingPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Highlighting_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Postprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\VariablesPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Variables_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\BlocksWidthPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Blocks_Width_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\CleanupPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Cleanup_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Preprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\SpacingPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Spacing_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\TypographyPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Typography_Preprocessor;
|
||||||
|
|
||||||
class ProcessManager {
|
class Process_Manager {
|
||||||
/** @var Preprocessor[] */
|
/** @var Preprocessor[] */
|
||||||
private $preprocessors = [];
|
private $preprocessors = [];
|
||||||
|
|
||||||
@ -19,12 +19,12 @@ class ProcessManager {
|
|||||||
private $postprocessors = [];
|
private $postprocessors = [];
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
CleanupPreprocessor $cleanupPreprocessor,
|
Cleanup_Preprocessor $cleanupPreprocessor,
|
||||||
BlocksWidthPreprocessor $blocksWidthPreprocessor,
|
Blocks_Width_Preprocessor $blocksWidthPreprocessor,
|
||||||
TypographyPreprocessor $typographyPreprocessor,
|
Typography_Preprocessor $typographyPreprocessor,
|
||||||
SpacingPreprocessor $spacingPreprocessor,
|
Spacing_Preprocessor $spacingPreprocessor,
|
||||||
HighlightingPostprocessor $highlightingPostprocessor,
|
Highlighting_Postprocessor $highlightingPostprocessor,
|
||||||
VariablesPostprocessor $variablesPostprocessor
|
Variables_Postprocessor $variablesPostprocessor
|
||||||
) {
|
) {
|
||||||
$this->registerPreprocessor($cleanupPreprocessor);
|
$this->registerPreprocessor($cleanupPreprocessor);
|
||||||
$this->registerPreprocessor($blocksWidthPreprocessor);
|
$this->registerPreprocessor($blocksWidthPreprocessor);
|
@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ContentRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Content_Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use MailPoetVendor\Html2Text\Html2Text;
|
use MailPoetVendor\Html2Text\Html2Text;
|
||||||
use MailPoetVendor\Pelago\Emogrifier\CssInliner;
|
use MailPoetVendor\Pelago\Emogrifier\CssInliner;
|
||||||
use WP_Style_Engine;
|
use WP_Style_Engine;
|
||||||
use WP_Theme_JSON;
|
use WP_Theme_JSON;
|
||||||
|
|
||||||
class Renderer {
|
class Renderer {
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
private ContentRenderer $contentRenderer;
|
private Content_Renderer $contentRenderer;
|
||||||
private Templates $templates;
|
private Templates $templates;
|
||||||
/** @var WP_Theme_JSON|null */
|
/** @var WP_Theme_JSON|null */
|
||||||
private static $theme = null;
|
private static $theme = null;
|
||||||
@ -21,9 +21,9 @@ class Renderer {
|
|||||||
const TEMPLATE_STYLES_FILE = 'template-canvas.css';
|
const TEMPLATE_STYLES_FILE = 'template-canvas.css';
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ContentRenderer $contentRenderer,
|
Content_Renderer $contentRenderer,
|
||||||
Templates $templates,
|
Templates $templates,
|
||||||
ThemeController $themeController
|
Theme_Controller $themeController
|
||||||
) {
|
) {
|
||||||
$this->contentRenderer = $contentRenderer;
|
$this->contentRenderer = $contentRenderer;
|
||||||
$this->templates = $templates;
|
$this->templates = $templates;
|
@ -13,10 +13,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class Heading extends AbstractBlockRenderer {
|
class Heading extends AbstractBlockRenderer {
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $blockContent;
|
return $blockContent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -28,11 +28,11 @@ class Heading extends AbstractBlockRenderer {
|
|||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlocksRegistry;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Blocks_Registry;
|
||||||
|
|
||||||
add_action('mailpoet_blocks_renderer_initialized', 'register_my_block_email_renderer');
|
add_action('mailpoet_blocks_renderer_initialized', 'register_my_block_email_renderer');
|
||||||
|
|
||||||
function register_my_block_email_renderer(BlocksRegistry $blocksRegistry): void {
|
function register_my_block_email_renderer(Blocks_Registry $blocksRegistry): void {
|
||||||
$blocksRegistry->addBlockRenderer('core/heading', new Renderer\Blocks\Heading());
|
$blocksRegistry->addBlockRenderer('core/heading', new Renderer\Blocks\Heading());
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -2,19 +2,19 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Templates;
|
namespace MailPoet\EmailEditor\Engine\Templates;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use MailPoet\EmailEditor\Validator\Builder;
|
use MailPoet\EmailEditor\Validator\Builder;
|
||||||
use WP_Theme_JSON;
|
use WP_Theme_JSON;
|
||||||
|
|
||||||
class TemplatePreview {
|
class Template_Preview {
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
private SettingsController $settingsController;
|
private Settings_Controller $settingsController;
|
||||||
private Templates $templates;
|
private Templates $templates;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ThemeController $themeController,
|
Theme_Controller $themeController,
|
||||||
SettingsController $settingsController,
|
Settings_Controller $settingsController,
|
||||||
Templates $templates
|
Templates $templates
|
||||||
) {
|
) {
|
||||||
$this->themeController = $themeController;
|
$this->themeController = $themeController;
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Templates;
|
namespace MailPoet\EmailEditor\Engine\Templates;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailStylesSchema;
|
use MailPoet\EmailEditor\Engine\Email_Styles_Schema;
|
||||||
use WP_Block_Template;
|
use WP_Block_Template;
|
||||||
|
|
||||||
// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
||||||
@ -187,7 +187,7 @@ class Templates {
|
|||||||
self::MAILPOET_EMAIL_META_THEME_TYPE,
|
self::MAILPOET_EMAIL_META_THEME_TYPE,
|
||||||
[
|
[
|
||||||
'show_in_rest' => [
|
'show_in_rest' => [
|
||||||
'schema' => (new EmailStylesSchema())->getSchema(),
|
'schema' => (new Email_Styles_Schema())->getSchema(),
|
||||||
],
|
],
|
||||||
'single' => true,
|
'single' => true,
|
||||||
'type' => 'object',
|
'type' => 'object',
|
||||||
@ -204,7 +204,7 @@ class Templates {
|
|||||||
'update_callback' => function($value, $template) {
|
'update_callback' => function($value, $template) {
|
||||||
return update_post_meta($template->wp_id, self::MAILPOET_EMAIL_META_THEME_TYPE, $value);
|
return update_post_meta($template->wp_id, self::MAILPOET_EMAIL_META_THEME_TYPE, $value);
|
||||||
},
|
},
|
||||||
'schema' => (new EmailStylesSchema())->getSchema(),
|
'schema' => (new Email_Styles_Schema())->getSchema(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Engine;
|
|||||||
|
|
||||||
use MailPoet\EmailEditor\Validator\Builder;
|
use MailPoet\EmailEditor\Validator\Builder;
|
||||||
|
|
||||||
class EmailApiController {
|
class Email_Api_Controller {
|
||||||
/**
|
/**
|
||||||
* @return array - Email specific data such styles.
|
* @return array - Email specific data such styles.
|
||||||
*/
|
*/
|
@ -3,7 +3,7 @@
|
|||||||
namespace MailPoet\EmailEditor\Engine;
|
namespace MailPoet\EmailEditor\Engine;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Patterns\Patterns;
|
use MailPoet\EmailEditor\Engine\Patterns\Patterns;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\TemplatePreview;
|
use MailPoet\EmailEditor\Engine\Templates\Template_Preview;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
||||||
use WP_Post;
|
use WP_Post;
|
||||||
use WP_Theme_JSON;
|
use WP_Theme_JSON;
|
||||||
@ -12,21 +12,21 @@ use WP_Theme_JSON;
|
|||||||
* @phpstan-type EmailPostType array{name: string, args: array, meta: array{key: string, args: array}[]}
|
* @phpstan-type EmailPostType array{name: string, args: array, meta: array{key: string, args: array}[]}
|
||||||
* See register_post_type for details about EmailPostType args.
|
* See register_post_type for details about EmailPostType args.
|
||||||
*/
|
*/
|
||||||
class EmailEditor {
|
class Email_Editor {
|
||||||
public const MAILPOET_EMAIL_META_THEME_TYPE = 'mailpoet_email_theme';
|
public const MAILPOET_EMAIL_META_THEME_TYPE = 'mailpoet_email_theme';
|
||||||
|
|
||||||
private EmailApiController $emailApiController;
|
private Email_Api_Controller $emailApiController;
|
||||||
private Templates $templates;
|
private Templates $templates;
|
||||||
private TemplatePreview $templatePreview;
|
private Template_Preview $templatePreview;
|
||||||
private Patterns $patterns;
|
private Patterns $patterns;
|
||||||
private SettingsController $settingsController;
|
private Settings_Controller $settingsController;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
EmailApiController $emailApiController,
|
Email_Api_Controller $emailApiController,
|
||||||
Templates $templates,
|
Templates $templates,
|
||||||
TemplatePreview $templatePreview,
|
Template_Preview $templatePreview,
|
||||||
Patterns $patterns,
|
Patterns $patterns,
|
||||||
SettingsController $settingsController
|
Settings_Controller $settingsController
|
||||||
) {
|
) {
|
||||||
$this->emailApiController = $emailApiController;
|
$this->emailApiController = $emailApiController;
|
||||||
$this->templates = $templates;
|
$this->templates = $templates;
|
||||||
@ -115,11 +115,11 @@ class EmailEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getEmailThemeDataSchema(): array {
|
public function getEmailThemeDataSchema(): array {
|
||||||
return (new EmailStylesSchema())->getSchema();
|
return (new Email_Styles_Schema())->getSchema();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extendEmailThemeStyles(WP_Theme_JSON $theme, WP_Post $post): WP_Theme_JSON {
|
public function extendEmailThemeStyles(WP_Theme_JSON $theme, WP_Post $post): WP_Theme_JSON {
|
||||||
$emailTheme = get_post_meta($post->ID, EmailEditor::MAILPOET_EMAIL_META_THEME_TYPE, true);
|
$emailTheme = get_post_meta($post->ID, Email_Editor::MAILPOET_EMAIL_META_THEME_TYPE, true);
|
||||||
if ($emailTheme && is_array($emailTheme)) {
|
if ($emailTheme && is_array($emailTheme)) {
|
||||||
$theme->merge(new WP_Theme_JSON($emailTheme));
|
$theme->merge(new WP_Theme_JSON($emailTheme));
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Engine;
|
|||||||
|
|
||||||
use MailPoet\EmailEditor\Validator\Builder;
|
use MailPoet\EmailEditor\Validator\Builder;
|
||||||
|
|
||||||
class EmailStylesSchema {
|
class Email_Styles_Schema {
|
||||||
public function getSchema(): array {
|
public function getSchema(): array {
|
||||||
$typographyProps = Builder::object([
|
$typographyProps = Builder::object([
|
||||||
'fontFamily' => Builder::string()->nullable(),
|
'fontFamily' => Builder::string()->nullable(),
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine;
|
namespace MailPoet\EmailEditor\Engine;
|
||||||
|
|
||||||
class SettingsController {
|
class Settings_Controller {
|
||||||
|
|
||||||
const ALLOWED_BLOCK_TYPES = [
|
const ALLOWED_BLOCK_TYPES = [
|
||||||
'core/button',
|
'core/button',
|
||||||
@ -22,15 +22,15 @@ class SettingsController {
|
|||||||
'enableCustomUnits' => ['px', '%'],
|
'enableCustomUnits' => ['px', '%'],
|
||||||
];
|
];
|
||||||
|
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
|
|
||||||
private array $iframeAssets = [];
|
private array $iframeAssets = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ThemeController $themeController
|
* @param Theme_Controller $themeController
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ThemeController $themeController
|
Theme_Controller $themeController
|
||||||
) {
|
) {
|
||||||
$this->themeController = $themeController;
|
$this->themeController = $themeController;
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ use WP_Theme_JSON_Resolver;
|
|||||||
* E-mail editor works with own theme.json which defines settings for the editor and styles for the e-mail.
|
* E-mail editor works with own theme.json which defines settings for the editor and styles for the e-mail.
|
||||||
* This class is responsible for accessing data defined by the theme.json.
|
* This class is responsible for accessing data defined by the theme.json.
|
||||||
*/
|
*/
|
||||||
class ThemeController {
|
class Theme_Controller {
|
||||||
private WP_Theme_JSON $coreTheme;
|
private WP_Theme_JSON $coreTheme;
|
||||||
private WP_Theme_JSON $baseTheme;
|
private WP_Theme_JSON $baseTheme;
|
||||||
|
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlockRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Block_Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use WP_Style_Engine;
|
use WP_Style_Engine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shared functionality for block renderers.
|
* Shared functionality for block renderers.
|
||||||
*/
|
*/
|
||||||
abstract class AbstractBlockRenderer implements BlockRenderer {
|
abstract class Abstract_Block_Renderer implements Block_Renderer {
|
||||||
/**
|
/**
|
||||||
* Wrapper for wp_style_engine_get_styles which ensures all values are returned.
|
* Wrapper for wp_style_engine_get_styles which ensures all values are returned.
|
||||||
*
|
*
|
||||||
@ -54,12 +54,12 @@ abstract class AbstractBlockRenderer implements BlockRenderer {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
public function render(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $this->addSpacer(
|
return $this->addSpacer(
|
||||||
$this->renderContent($blockContent, $parsedBlock, $settingsController),
|
$this->renderContent($blockContent, $parsedBlock, $settingsController),
|
||||||
$parsedBlock['email_attrs'] ?? []
|
$parsedBlock['email_attrs'] ?? []
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string;
|
abstract protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string;
|
||||||
}
|
}
|
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Utils\DomDocumentHelper;
|
use MailPoet\EmailEditor\Integrations\Utils\Dom_Document_Helper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders a button block.
|
* Renders a button block.
|
||||||
* @see https://www.activecampaign.com/blog/email-buttons
|
* @see https://www.activecampaign.com/blog/email-buttons
|
||||||
* @see https://documentation.mjml.io/#mj-button
|
* @see https://documentation.mjml.io/#mj-button
|
||||||
*/
|
*/
|
||||||
class Button extends AbstractBlockRenderer {
|
class Button extends Abstract_Block_Renderer {
|
||||||
private function getWrapperStyles(array $blockStyles) {
|
private function getWrapperStyles(array $blockStyles) {
|
||||||
$properties = ['border', 'color', 'typography', 'spacing'];
|
$properties = ['border', 'color', 'typography', 'spacing'];
|
||||||
$styles = $this->getStylesFromBlock(array_intersect_key($blockStyles, array_flip($properties)));
|
$styles = $this->getStylesFromBlock(array_intersect_key($blockStyles, array_flip($properties)));
|
||||||
@ -33,16 +33,16 @@ class Button extends AbstractBlockRenderer {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
public function render(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $this->renderContent($blockContent, $parsedBlock, $settingsController);
|
return $this->renderContent($blockContent, $parsedBlock, $settingsController);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
if (empty($parsedBlock['innerHTML'])) {
|
if (empty($parsedBlock['innerHTML'])) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$domHelper = new DomDocumentHelper($parsedBlock['innerHTML']);
|
$domHelper = new Dom_Document_Helper($parsedBlock['innerHTML']);
|
||||||
$blockClassname = $domHelper->getAttributeValueByTagName('div', 'class') ?? '';
|
$blockClassname = $domHelper->getAttributeValueByTagName('div', 'class') ?? '';
|
||||||
$buttonLink = $domHelper->findElement('a');
|
$buttonLink = $domHelper->findElement('a');
|
||||||
|
|
@ -2,20 +2,20 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout\FlexLayoutRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout\Flex_Layout_Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class Buttons extends AbstractBlockRenderer {
|
class Buttons extends Abstract_Block_Renderer {
|
||||||
/** @var FlexLayoutRenderer */
|
/** @var Flex_Layout_Renderer */
|
||||||
private $flexLayoutRenderer;
|
private $flexLayoutRenderer;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
FlexLayoutRenderer $flexLayoutRenderer
|
Flex_Layout_Renderer $flexLayoutRenderer
|
||||||
) {
|
) {
|
||||||
$this->flexLayoutRenderer = $flexLayoutRenderer;
|
$this->flexLayoutRenderer = $flexLayoutRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
// Ignore font size set on the buttons block
|
// Ignore font size set on the buttons block
|
||||||
// We rely on TypographyPreprocessor to set the font size on the buttons
|
// We rely on TypographyPreprocessor to set the font size on the buttons
|
||||||
// Rendering font size on the wrapper causes unwanted whitespace below the buttons
|
// Rendering font size on the wrapper causes unwanted whitespace below the buttons
|
@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\AbstractBlockRenderer;
|
use MailPoet\EmailEditor\Integrations\Utils\Dom_Document_Helper;
|
||||||
use MailPoet\EmailEditor\Integrations\Utils\DomDocumentHelper;
|
|
||||||
use WP_Style_Engine;
|
use WP_Style_Engine;
|
||||||
|
|
||||||
class Column extends AbstractBlockRenderer {
|
class Column extends Abstract_Block_Renderer {
|
||||||
/**
|
/**
|
||||||
* Override this method to disable spacing (block gap) for columns.
|
* Override this method to disable spacing (block gap) for columns.
|
||||||
* Spacing is applied on wrapping columns block. Columns are rendered side by side so no spacer is needed.
|
* Spacing is applied on wrapping columns block. Columns are rendered side by side so no spacer is needed.
|
||||||
@ -16,7 +15,7 @@ class Column extends AbstractBlockRenderer {
|
|||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$content = '';
|
$content = '';
|
||||||
foreach ($parsedBlock['innerBlocks'] ?? [] as $block) {
|
foreach ($parsedBlock['innerBlocks'] ?? [] as $block) {
|
||||||
$content .= render_block($block);
|
$content .= render_block($block);
|
||||||
@ -32,8 +31,8 @@ class Column extends AbstractBlockRenderer {
|
|||||||
/**
|
/**
|
||||||
* Based on MJML <mj-column>
|
* Based on MJML <mj-column>
|
||||||
*/
|
*/
|
||||||
private function getBlockWrapper(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
private function getBlockWrapper(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$originalWrapperClassname = (new DomDocumentHelper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
$originalWrapperClassname = (new Dom_Document_Helper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
||||||
$block_attributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
$block_attributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
||||||
'verticalAlignment' => 'stretch',
|
'verticalAlignment' => 'stretch',
|
||||||
'width' => $settingsController->getLayoutWidthWithoutPadding(),
|
'width' => $settingsController->getLayoutWidthWithoutPadding(),
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\AbstractBlockRenderer;
|
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\Abstract_Block_Renderer;
|
||||||
use MailPoet\EmailEditor\Integrations\Utils\DomDocumentHelper;
|
use MailPoet\EmailEditor\Integrations\Utils\Dom_Document_Helper;
|
||||||
use WP_Style_Engine;
|
use WP_Style_Engine;
|
||||||
|
|
||||||
class Columns extends AbstractBlockRenderer {
|
class Columns extends Abstract_Block_Renderer {
|
||||||
protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$content = '';
|
$content = '';
|
||||||
foreach ($parsedBlock['innerBlocks'] ?? [] as $block) {
|
foreach ($parsedBlock['innerBlocks'] ?? [] as $block) {
|
||||||
$content .= render_block($block);
|
$content .= render_block($block);
|
||||||
@ -24,8 +24,8 @@ class Columns extends AbstractBlockRenderer {
|
|||||||
/**
|
/**
|
||||||
* Based on MJML <mj-section>
|
* Based on MJML <mj-section>
|
||||||
*/
|
*/
|
||||||
private function getBlockWrapper(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
private function getBlockWrapper(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$originalWrapperClassname = (new DomDocumentHelper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
$originalWrapperClassname = (new Dom_Document_Helper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
||||||
$block_attributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
$block_attributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
||||||
'align' => null,
|
'align' => null,
|
||||||
'width' => $settingsController->getLayoutWidthWithoutPadding(),
|
'width' => $settingsController->getLayoutWidthWithoutPadding(),
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fallback block renderer.
|
* Fallback block renderer.
|
||||||
@ -13,8 +13,8 @@ use MailPoet\EmailEditor\Engine\SettingsController;
|
|||||||
*
|
*
|
||||||
* We need to find a better abstraction/architecture for this.
|
* We need to find a better abstraction/architecture for this.
|
||||||
*/
|
*/
|
||||||
class Fallback extends AbstractBlockRenderer {
|
class Fallback extends Abstract_Block_Renderer {
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $blockContent;
|
return $blockContent;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\AbstractBlockRenderer;
|
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\Abstract_Block_Renderer;
|
||||||
use MailPoet\EmailEditor\Integrations\Utils\DomDocumentHelper;
|
use MailPoet\EmailEditor\Integrations\Utils\Dom_Document_Helper;
|
||||||
use WP_Style_Engine;
|
use WP_Style_Engine;
|
||||||
|
|
||||||
class Group extends AbstractBlockRenderer {
|
class Group extends Abstract_Block_Renderer {
|
||||||
protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$content = '';
|
$content = '';
|
||||||
$innerBlocks = $parsedBlock['innerBlocks'] ?? [];
|
$innerBlocks = $parsedBlock['innerBlocks'] ?? [];
|
||||||
|
|
||||||
@ -23,8 +23,8 @@ class Group extends AbstractBlockRenderer {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getBlockWrapper(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
private function getBlockWrapper(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$originalClassname = (new DomDocumentHelper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
$originalClassname = (new Dom_Document_Helper($blockContent))->getAttributeValueByTagName('div', 'class') ?? '';
|
||||||
$blockAttributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
$blockAttributes = wp_parse_args($parsedBlock['attrs'] ?? [], [
|
||||||
'style' => [],
|
'style' => [],
|
||||||
'backgroundColor' => '',
|
'backgroundColor' => '',
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Utils\DomDocumentHelper;
|
use MailPoet\EmailEditor\Integrations\Utils\Dom_Document_Helper;
|
||||||
|
|
||||||
class Image extends AbstractBlockRenderer {
|
class Image extends Abstract_Block_Renderer {
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$parsedHtml = $this->parseBlockContent($blockContent);
|
$parsedHtml = $this->parseBlockContent($blockContent);
|
||||||
|
|
||||||
if (!$parsedHtml) {
|
if (!$parsedHtml) {
|
||||||
@ -47,7 +47,7 @@ class Image extends AbstractBlockRenderer {
|
|||||||
/**
|
/**
|
||||||
* When the width is not set, it's important to get it for the image to be displayed correctly
|
* When the width is not set, it's important to get it for the image to be displayed correctly
|
||||||
*/
|
*/
|
||||||
private function addImageSizeWhenMissing(array $parsedBlock, string $imageUrl, SettingsController $settingsController): array {
|
private function addImageSizeWhenMissing(array $parsedBlock, string $imageUrl, Settings_Controller $settingsController): array {
|
||||||
if (isset($parsedBlock['attrs']['width'])) {
|
if (isset($parsedBlock['attrs']['width'])) {
|
||||||
return $parsedBlock;
|
return $parsedBlock;
|
||||||
}
|
}
|
||||||
@ -65,7 +65,6 @@ class Image extends AbstractBlockRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function applyImageBorderStyle(string $blockContent, array $parsedBlock, string $class): string {
|
private function applyImageBorderStyle(string $blockContent, array $parsedBlock, string $class): string {
|
||||||
|
|
||||||
// Getting individual border properties
|
// Getting individual border properties
|
||||||
$borderStyles = wp_style_engine_get_styles(['border' => $parsedBlock['attrs']['style']['border'] ?? []]);
|
$borderStyles = wp_style_engine_get_styles(['border' => $parsedBlock['attrs']['style']['border'] ?? []]);
|
||||||
$borderStyles = $borderStyles['declarations'] ?? [];
|
$borderStyles = $borderStyles['declarations'] ?? [];
|
||||||
@ -91,7 +90,7 @@ class Image extends AbstractBlockRenderer {
|
|||||||
/**
|
/**
|
||||||
* Settings width and height attributes for images is important for MS Outlook.
|
* Settings width and height attributes for images is important for MS Outlook.
|
||||||
*/
|
*/
|
||||||
private function addImageDimensions($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
private function addImageDimensions($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$html = new \WP_HTML_Tag_Processor($blockContent);
|
$html = new \WP_HTML_Tag_Processor($blockContent);
|
||||||
if ($html->next_tag(['tag_name' => 'img'])) {
|
if ($html->next_tag(['tag_name' => 'img'])) {
|
||||||
// Getting height from styles and if it's set, we set the height attribute
|
// Getting height from styles and if it's set, we set the height attribute
|
||||||
@ -117,7 +116,7 @@ class Image extends AbstractBlockRenderer {
|
|||||||
* This method configure the font size of the caption because it's set to 0 for the parent element to avoid unexpected white spaces
|
* This method configure the font size of the caption because it's set to 0 for the parent element to avoid unexpected white spaces
|
||||||
* We try to use font-size passed down from the parent element $parsedBlock['email_attrs']['font-size'], but if it's not set, we use the default font-size from the email theme.
|
* We try to use font-size passed down from the parent element $parsedBlock['email_attrs']['font-size'], but if it's not set, we use the default font-size from the email theme.
|
||||||
*/
|
*/
|
||||||
private function getCaptionStyles(SettingsController $settingsController, array $parsedBlock): string {
|
private function getCaptionStyles(Settings_Controller $settingsController, array $parsedBlock): string {
|
||||||
$themeData = $settingsController->getTheme()->get_data();
|
$themeData = $settingsController->getTheme()->get_data();
|
||||||
|
|
||||||
$styles = [
|
$styles = [
|
||||||
@ -131,7 +130,7 @@ class Image extends AbstractBlockRenderer {
|
|||||||
/**
|
/**
|
||||||
* Based on MJML <mj-image> but because MJML doesn't support captions, our solution is a bit different
|
* Based on MJML <mj-image> but because MJML doesn't support captions, our solution is a bit different
|
||||||
*/
|
*/
|
||||||
private function getBlockWrapper(array $parsedBlock, SettingsController $settingsController, ?string $caption): string {
|
private function getBlockWrapper(array $parsedBlock, Settings_Controller $settingsController, ?string $caption): string {
|
||||||
$styles = [
|
$styles = [
|
||||||
'border-collapse' => 'collapse',
|
'border-collapse' => 'collapse',
|
||||||
'border-spacing' => '0px',
|
'border-spacing' => '0px',
|
||||||
@ -244,7 +243,7 @@ class Image extends AbstractBlockRenderer {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$domHelper = new DomDocumentHelper($blockContent);
|
$domHelper = new Dom_Document_Helper($blockContent);
|
||||||
|
|
||||||
$figureTag = $domHelper->findElement('figure');
|
$figureTag = $domHelper->findElement('figure');
|
||||||
if (!$figureTag) {
|
if (!$figureTag) {
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
// We have to avoid using keyword `List`
|
// We have to avoid using keyword `List`
|
||||||
class ListBlock extends AbstractBlockRenderer {
|
class List_Block extends Abstract_Block_Renderer {
|
||||||
protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
$html = new \WP_HTML_Tag_Processor($blockContent);
|
$html = new \WP_HTML_Tag_Processor($blockContent);
|
||||||
$tagName = ($parsedBlock['attrs']['ordered'] ?? false) ? 'ol' : 'ul';
|
$tagName = ($parsedBlock['attrs']['ordered'] ?? false) ? 'ol' : 'ul';
|
||||||
if ($html->next_tag(['tag_name' => $tagName])) {
|
if ($html->next_tag(['tag_name' => $tagName])) {
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ListItem extends AbstractBlockRenderer {
|
class List_Item extends Abstract_Block_Renderer {
|
||||||
/**
|
/**
|
||||||
* Override this method to disable spacing (block gap) for list items.
|
* Override this method to disable spacing (block gap) for list items.
|
||||||
*/
|
*/
|
||||||
@ -12,7 +12,7 @@ class ListItem extends AbstractBlockRenderer {
|
|||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function renderContent($blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent($blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $blockContent;
|
return $blockContent;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This renderer covers both core/paragraph and core/heading blocks
|
* This renderer covers both core/paragraph and core/heading blocks
|
||||||
*/
|
*/
|
||||||
class Text extends AbstractBlockRenderer {
|
class Text extends Abstract_Block_Renderer {
|
||||||
protected function renderContent(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
protected function renderContent(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
// Do not render empty blocks.
|
// Do not render empty blocks.
|
||||||
if (empty(trim(strip_tags($blockContent)))) {
|
if (empty(trim(strip_tags($blockContent)))) {
|
||||||
return '';
|
return '';
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core;
|
namespace MailPoet\EmailEditor\Integrations\Core;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlocksRegistry;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Blocks_Registry;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout\FlexLayoutRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout\Flex_Layout_Renderer;
|
||||||
|
|
||||||
class Initializer {
|
class Initializer {
|
||||||
public function initialize(): void {
|
public function initialize(): void {
|
||||||
@ -15,15 +15,15 @@ class Initializer {
|
|||||||
/**
|
/**
|
||||||
* Register core blocks email renderers when the blocks renderer is initialized.
|
* Register core blocks email renderers when the blocks renderer is initialized.
|
||||||
*/
|
*/
|
||||||
public function registerCoreBlocksRenderers(BlocksRegistry $blocksRegistry): void {
|
public function registerCoreBlocksRenderers(Blocks_Registry $blocksRegistry): void {
|
||||||
$blocksRegistry->addBlockRenderer('core/paragraph', new Renderer\Blocks\Text());
|
$blocksRegistry->addBlockRenderer('core/paragraph', new Renderer\Blocks\Text());
|
||||||
$blocksRegistry->addBlockRenderer('core/heading', new Renderer\Blocks\Text());
|
$blocksRegistry->addBlockRenderer('core/heading', new Renderer\Blocks\Text());
|
||||||
$blocksRegistry->addBlockRenderer('core/column', new Renderer\Blocks\Column());
|
$blocksRegistry->addBlockRenderer('core/column', new Renderer\Blocks\Column());
|
||||||
$blocksRegistry->addBlockRenderer('core/columns', new Renderer\Blocks\Columns());
|
$blocksRegistry->addBlockRenderer('core/columns', new Renderer\Blocks\Columns());
|
||||||
$blocksRegistry->addBlockRenderer('core/list', new Renderer\Blocks\ListBlock());
|
$blocksRegistry->addBlockRenderer('core/list', new Renderer\Blocks\List_Block());
|
||||||
$blocksRegistry->addBlockRenderer('core/list-item', new Renderer\Blocks\ListItem());
|
$blocksRegistry->addBlockRenderer('core/list-item', new Renderer\Blocks\List_Item());
|
||||||
$blocksRegistry->addBlockRenderer('core/image', new Renderer\Blocks\Image());
|
$blocksRegistry->addBlockRenderer('core/image', new Renderer\Blocks\Image());
|
||||||
$blocksRegistry->addBlockRenderer('core/buttons', new Renderer\Blocks\Buttons(new FlexLayoutRenderer()));
|
$blocksRegistry->addBlockRenderer('core/buttons', new Renderer\Blocks\Buttons(new Flex_Layout_Renderer()));
|
||||||
$blocksRegistry->addBlockRenderer('core/button', new Renderer\Blocks\Button());
|
$blocksRegistry->addBlockRenderer('core/button', new Renderer\Blocks\Button());
|
||||||
$blocksRegistry->addBlockRenderer('core/group', new Renderer\Blocks\Group());
|
$blocksRegistry->addBlockRenderer('core/group', new Renderer\Blocks\Group());
|
||||||
// Render used for all other blocks
|
// Render used for all other blocks
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Integrations\Utils;
|
|||||||
/**
|
/**
|
||||||
* This class should guarantee that our work with the DOMDocument is unified and safe.
|
* This class should guarantee that our work with the DOMDocument is unified and safe.
|
||||||
*/
|
*/
|
||||||
class DomDocumentHelper {
|
class Dom_Document_Helper {
|
||||||
private \DOMDocument $dom;
|
private \DOMDocument $dom;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Utils;
|
namespace MailPoet\EmailEditor\Utils;
|
||||||
|
|
||||||
class CdnAssetUrl {
|
class Cdn_Asset_Url {
|
||||||
const CDN_URL = 'https://ps.w.org/mailpoet/';
|
const CDN_URL = 'https://ps.w.org/mailpoet/';
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $baseUrl;
|
private $baseUrl;
|
@ -1,57 +0,0 @@
|
|||||||
<?php declare(strict_types = 1);
|
|
||||||
|
|
||||||
namespace MailPoet\EmailEditor\Validator;
|
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\AnyOfSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\ArraySchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\BooleanSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\IntegerSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\NullSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\NumberSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\ObjectSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\OneOfSchema;
|
|
||||||
use MailPoet\EmailEditor\Validator\Schema\StringSchema;
|
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/
|
|
||||||
class Builder {
|
|
||||||
public static function string(): StringSchema {
|
|
||||||
return new StringSchema();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function number(): NumberSchema {
|
|
||||||
return new NumberSchema();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function integer(): IntegerSchema {
|
|
||||||
return new IntegerSchema();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function boolean(): BooleanSchema {
|
|
||||||
return new BooleanSchema();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function null(): NullSchema {
|
|
||||||
return new NullSchema();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function array(Schema $items = null): ArraySchema {
|
|
||||||
$array = new ArraySchema();
|
|
||||||
return $items ? $array->items($items) : $array;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param array<string, Schema>|null $properties */
|
|
||||||
public static function object(array $properties = null): ObjectSchema {
|
|
||||||
$object = new ObjectSchema();
|
|
||||||
return $properties === null ? $object : $object->properties($properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param Schema[] $schemas */
|
|
||||||
public static function oneOf(array $schemas): OneOfSchema {
|
|
||||||
return new OneOfSchema($schemas);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param Schema[] $schemas */
|
|
||||||
public static function anyOf(array $schemas): AnyOfSchema {
|
|
||||||
return new AnyOfSchema($schemas);
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
|
||||||
class AnyOfSchema extends Schema {
|
class Any_Of_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'anyOf' => [],
|
'anyOf' => [],
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#arrays
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#arrays
|
||||||
class ArraySchema extends Schema {
|
class Array_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'array',
|
'type' => 'array',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#primitive-types
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#primitive-types
|
||||||
class BooleanSchema extends Schema {
|
class Boolean_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'boolean',
|
'type' => 'boolean',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#numbers
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#numbers
|
||||||
class IntegerSchema extends Schema {
|
class Integer_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'integer',
|
'type' => 'integer',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#primitive-types
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#primitive-types
|
||||||
class NullSchema extends Schema {
|
class Null_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'null',
|
'type' => 'null',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#numbers
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#numbers
|
||||||
class NumberSchema extends Schema {
|
class Number_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#objects
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#objects
|
||||||
class ObjectSchema extends Schema {
|
class Object_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'object',
|
'type' => 'object',
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
|
||||||
class OneOfSchema extends Schema {
|
class One_Of_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'oneOf' => [],
|
'oneOf' => [],
|
||||||
];
|
];
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator\Schema;
|
|||||||
use MailPoet\EmailEditor\Validator\Schema;
|
use MailPoet\EmailEditor\Validator\Schema;
|
||||||
|
|
||||||
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#strings
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#strings
|
||||||
class StringSchema extends Schema {
|
class String_Schema extends Schema {
|
||||||
protected $schema = [
|
protected $schema = [
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
];
|
];
|
57
packages/php/email-editor/src/Validator/class-builder.php
Normal file
57
packages/php/email-editor/src/Validator/class-builder.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace MailPoet\EmailEditor\Validator;
|
||||||
|
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Any_Of_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Array_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Boolean_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Integer_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Null_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Number_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\Object_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\One_Of_Schema;
|
||||||
|
use MailPoet\EmailEditor\Validator\Schema\String_Schema;
|
||||||
|
|
||||||
|
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/
|
||||||
|
class Builder {
|
||||||
|
public static function string(): String_Schema {
|
||||||
|
return new String_Schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function number(): Number_Schema {
|
||||||
|
return new Number_Schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function integer(): Integer_Schema {
|
||||||
|
return new Integer_Schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function boolean(): Boolean_Schema {
|
||||||
|
return new Boolean_Schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function null(): Null_Schema {
|
||||||
|
return new Null_Schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function array(Schema $items = null): Array_Schema {
|
||||||
|
$array = new Array_Schema();
|
||||||
|
return $items ? $array->items($items) : $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param array<string, Schema>|null $properties */
|
||||||
|
public static function object(array $properties = null): Object_Schema {
|
||||||
|
$object = new Object_Schema();
|
||||||
|
return $properties === null ? $object : $object->properties($properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param Schema[] $schemas */
|
||||||
|
public static function oneOf(array $schemas): One_Of_Schema {
|
||||||
|
return new One_Of_Schema($schemas);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param Schema[] $schemas */
|
||||||
|
public static function anyOf(array $schemas): Any_Of_Schema {
|
||||||
|
return new Any_Of_Schema($schemas);
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,7 @@ namespace MailPoet\EmailEditor\Validator;
|
|||||||
use MailPoet\UnexpectedValueException;
|
use MailPoet\UnexpectedValueException;
|
||||||
use WP_Error;
|
use WP_Error;
|
||||||
|
|
||||||
class ValidationException extends UnexpectedValueException {
|
class Validation_Exception extends UnexpectedValueException {
|
||||||
/** @var WP_Error */
|
/** @var WP_Error */
|
||||||
protected $wpError;
|
protected $wpError;
|
||||||
|
|
@ -39,7 +39,7 @@ class Validator {
|
|||||||
public function validateSchemaArray(array $schema, $value, string $paramName = 'value') {
|
public function validateSchemaArray(array $schema, $value, string $paramName = 'value') {
|
||||||
$result = $this->validateAndSanitizeValueFromSchema($value, $schema, $paramName);
|
$result = $this->validateAndSanitizeValueFromSchema($value, $schema, $paramName);
|
||||||
if ($result instanceof WP_Error) {
|
if ($result instanceof WP_Error) {
|
||||||
throw ValidationException::createFromWpError($result);
|
throw Validation_Exception::createFromWpError($result);
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use _generated\UnitTesterActions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inherited Methods
|
* Inherited Methods
|
||||||
@ -18,7 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
class UnitTester extends \Codeception\Actor
|
class UnitTester extends \Codeception\Actor
|
||||||
{
|
{
|
||||||
use _generated\UnitTesterActions;
|
use UnitTesterActions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define custom actions here
|
* Define custom actions here
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine;
|
namespace MailPoet\EmailEditor\Engine;
|
||||||
|
|
||||||
class EmailEditorTest extends \MailPoetTest {
|
class Email_Editor_Test extends \MailPoetTest {
|
||||||
/** @var EmailEditor */
|
/** @var Email_Editor */
|
||||||
private $emailEditor;
|
private $emailEditor;
|
||||||
|
|
||||||
/** @var callable */
|
/** @var callable */
|
||||||
@ -11,7 +11,7 @@ class EmailEditorTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->emailEditor = $this->diContainer->get(EmailEditor::class);
|
$this->emailEditor = $this->diContainer->get(Email_Editor::class);
|
||||||
$this->postRegisterCallback = function ($postTypes) {
|
$this->postRegisterCallback = function ($postTypes) {
|
||||||
$postTypes[] = [
|
$postTypes[] = [
|
||||||
'name' => 'custom_email_type',
|
'name' => 'custom_email_type',
|
@ -4,16 +4,16 @@ namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
|||||||
|
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\Text;
|
use MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks\Text;
|
||||||
|
|
||||||
require_once __DIR__ . '/DummyBlockRenderer.php';
|
require_once __DIR__ . '/Dummy_Block_Renderer.php';
|
||||||
|
|
||||||
class BlocksRegistryTest extends \MailPoetTest {
|
class Blocks_Registry_Test extends \MailPoetTest {
|
||||||
|
|
||||||
/** @var BlocksRegistry */
|
/** @var Blocks_Registry */
|
||||||
private $registry;
|
private $registry;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->registry = $this->diContainer->get(BlocksRegistry::class);
|
$this->registry = $this->diContainer->get(Blocks_Registry::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsNullForUnknownRenderer() {
|
public function testItReturnsNullForUnknownRenderer() {
|
@ -2,21 +2,21 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
||||||
|
|
||||||
require_once __DIR__ . '/DummyBlockRenderer.php';
|
require_once __DIR__ . '/Dummy_Block_Renderer.php';
|
||||||
|
|
||||||
class ContentRendererTest extends \MailPoetTest {
|
class Content_Renderer_Test extends \MailPoetTest {
|
||||||
private ContentRenderer $renderer;
|
private Content_Renderer $renderer;
|
||||||
|
|
||||||
private \WP_Post $emailPost;
|
private \WP_Post $emailPost;
|
||||||
|
|
||||||
public function _before(): void {
|
public function _before(): void {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->diContainer->get(BlockTypesController::class)->initialize();
|
$this->diContainer->get(BlockTypesController::class)->initialize();
|
||||||
$this->renderer = $this->diContainer->get(ContentRenderer::class);
|
$this->renderer = $this->diContainer->get(Content_Renderer::class);
|
||||||
$this->emailPost = $this->tester->createPost([
|
$this->emailPost = $this->tester->createPost([
|
||||||
'post_content' => '<!-- wp:paragraph --><p>Hello!</p><!-- /wp:paragraph -->',
|
'post_content' => '<!-- wp:paragraph --><p>Hello!</p><!-- /wp:paragraph -->',
|
||||||
]);
|
]);
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class DummyBlockRenderer implements BlockRenderer {
|
class Dummy_Block_Renderer implements Block_Renderer {
|
||||||
public function render(string $blockContent, array $parsedBlock, SettingsController $settingsController): string {
|
public function render(string $blockContent, array $parsedBlock, Settings_Controller $settingsController): string {
|
||||||
return $parsedBlock['innerHtml'];
|
return $parsedBlock['innerHtml'];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,23 +2,23 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout;
|
namespace MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Layout;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\DummyBlockRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Dummy_Block_Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
require_once __DIR__ . '/../DummyBlockRenderer.php';
|
require_once __DIR__ . '/../Dummy_Block_Renderer.php';
|
||||||
|
|
||||||
class FlexLayoutRendererTest extends \MailPoetTest {
|
class Flex_Layout_Renderer_Test extends \MailPoetTest {
|
||||||
|
|
||||||
/** @var FlexLayoutRenderer */
|
/** @var Flex_Layout_Renderer */
|
||||||
private $renderer;
|
private $renderer;
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before(): void {
|
public function _before(): void {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
$this->renderer = new FlexLayoutRenderer();
|
$this->renderer = new Flex_Layout_Renderer();
|
||||||
register_block_type('dummy/block', []);
|
register_block_type('dummy/block', []);
|
||||||
add_filter('render_block', [$this, 'renderDummyBlock'], 10, 2);
|
add_filter('render_block', [$this, 'renderDummyBlock'], 10, 2);
|
||||||
}
|
}
|
||||||
@ -223,7 +223,7 @@ class FlexLayoutRendererTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function renderDummyBlock($blockContent, $parsedBlock): string {
|
public function renderDummyBlock($blockContent, $parsedBlock): string {
|
||||||
$dummyRenderer = new DummyBlockRenderer();
|
$dummyRenderer = new Dummy_Block_Renderer();
|
||||||
return $dummyRenderer->render($blockContent, $parsedBlock, $this->settingsController);
|
return $dummyRenderer->render($blockContent, $parsedBlock, $this->settingsController);
|
||||||
}
|
}
|
||||||
|
|
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
|
|
||||||
class RendererTest extends \MailPoetTest {
|
class Renderer_Test extends \MailPoetTest {
|
||||||
private Renderer $renderer;
|
private Renderer $renderer;
|
||||||
|
|
||||||
private \WP_Post $emailPost;
|
private \WP_Post $emailPost;
|
||||||
|
|
||||||
public function _before(): void {
|
public function _before(): void {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->renderer = $this->diContainer->get(Renderer::class);
|
$this->renderer = $this->diContainer->get(Renderer::class);
|
||||||
$styles = [
|
$styles = [
|
||||||
'spacing' => [
|
'spacing' => [
|
||||||
@ -35,9 +35,9 @@ class RendererTest extends \MailPoetTest {
|
|||||||
$themeJsonMock->method('get_data')->willReturn([
|
$themeJsonMock->method('get_data')->willReturn([
|
||||||
'styles' => $styles,
|
'styles' => $styles,
|
||||||
]);
|
]);
|
||||||
$settingsControllerMock = $this->createMock(SettingsController::class);
|
$settingsControllerMock = $this->createMock(Settings_Controller::class);
|
||||||
$settingsControllerMock->method('getEmailStyles')->willReturn($styles);
|
$settingsControllerMock->method('getEmailStyles')->willReturn($styles);
|
||||||
$themeControllerMock = $this->createMock(ThemeController::class);
|
$themeControllerMock = $this->createMock(Theme_Controller::class);
|
||||||
$themeControllerMock->method('getTheme')->willReturn($themeJsonMock);
|
$themeControllerMock->method('getTheme')->willReturn($themeJsonMock);
|
||||||
$themeControllerMock->method('getStyles')->willReturn($styles);
|
$themeControllerMock->method('getStyles')->willReturn($styles);
|
||||||
$themeControllerMock->method('getLayoutSettings')->willReturn(['contentSize' => '660px']);
|
$themeControllerMock->method('getLayoutSettings')->willReturn(['contentSize' => '660px']);
|
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine;
|
namespace MailPoet\EmailEditor\Engine;
|
||||||
|
|
||||||
class ThemeControllerTest extends \MailPoetTest {
|
class Theme_Controller_Test extends \MailPoetTest {
|
||||||
private ThemeController $themeController;
|
private Theme_Controller $themeController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->themeController = $this->diContainer->get(ThemeController::class);
|
$this->themeController = $this->diContainer->get(Theme_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItGeneratesCssStylesForRenderer() {
|
public function testItGeneratesCssStylesForRenderer() {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ButtonTest extends \MailPoetTest {
|
class Button_Test extends \MailPoetTest {
|
||||||
/** @var Button */
|
/** @var Button */
|
||||||
private $buttonRenderer;
|
private $buttonRenderer;
|
||||||
|
|
||||||
@ -38,13 +38,13 @@ class ButtonTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before(): void {
|
public function _before(): void {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->buttonRenderer = new Button();
|
$this->buttonRenderer = new Button();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersLink(): void {
|
public function testItRendersLink(): void {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ColumnTest extends \MailPoetTest {
|
class Column_Test extends \MailPoetTest {
|
||||||
/** @var Column */
|
/** @var Column */
|
||||||
private $columnRenderer;
|
private $columnRenderer;
|
||||||
|
|
||||||
@ -35,13 +35,13 @@ class ColumnTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->columnRenderer = new Column();
|
$this->columnRenderer = new Column();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersColumnContent() {
|
public function testItRendersColumnContent() {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ColumnsTest extends \MailPoetTest {
|
class Columns_Test extends \MailPoetTest {
|
||||||
/** @var Columns */
|
/** @var Columns */
|
||||||
private $columnsRenderer;
|
private $columnsRenderer;
|
||||||
|
|
||||||
@ -42,13 +42,13 @@ class ColumnsTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->columnsRenderer = new Columns();
|
$this->columnsRenderer = new Columns();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersInnerColumn() {
|
public function testItRendersInnerColumn() {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class HeadingTest extends \MailPoetTest {
|
class Heading_Test extends \MailPoetTest {
|
||||||
/** @var Text */
|
/** @var Text */
|
||||||
private $headingRenderer;
|
private $headingRenderer;
|
||||||
|
|
||||||
@ -34,13 +34,13 @@ class HeadingTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->headingRenderer = new Text();
|
$this->headingRenderer = new Text();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersContent(): void {
|
public function testItRendersContent(): void {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ImageTest extends \MailPoetTest {
|
class Image_Test extends \MailPoetTest {
|
||||||
/** @var Image */
|
/** @var Image */
|
||||||
private $imageRenderer;
|
private $imageRenderer;
|
||||||
|
|
||||||
@ -32,13 +32,13 @@ class ImageTest extends \MailPoetTest {
|
|||||||
'innerContent' => [],
|
'innerContent' => [],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->imageRenderer = new Image();
|
$this->imageRenderer = new Image();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersMandatoryImageStyles(): void {
|
public function testItRendersMandatoryImageStyles(): void {
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ListBlockTest extends \MailPoetTest {
|
class List_Block_Test extends \MailPoetTest {
|
||||||
/** @var ListBlock */
|
/** @var List_Block */
|
||||||
private $listRenderer;
|
private $listRenderer;
|
||||||
|
|
||||||
/** @var array */
|
/** @var array */
|
||||||
@ -41,13 +41,13 @@ class ListBlockTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->listRenderer = new ListBlock();
|
$this->listRenderer = new List_Block();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersListContent(): void {
|
public function testItRendersListContent(): void {
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class ParagraphTest extends \MailPoetTest {
|
class Paragraph_Test extends \MailPoetTest {
|
||||||
/** @var Text */
|
/** @var Text */
|
||||||
private $paragraphRenderer;
|
private $paragraphRenderer;
|
||||||
|
|
||||||
@ -26,13 +26,13 @@ class ParagraphTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var SettingsController */
|
/** @var Settings_Controller */
|
||||||
private $settingsController;
|
private $settingsController;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->paragraphRenderer = new Text();
|
$this->paragraphRenderer = new Text();
|
||||||
$this->settingsController = $this->diContainer->get(SettingsController::class);
|
$this->settingsController = $this->diContainer->get(Settings_Controller::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRendersContent(): void {
|
public function testItRendersContent(): void {
|
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Core\Renderer;
|
namespace MailPoet\EmailEditor\Integrations\Core\Renderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\Renderer;
|
use MailPoet\EmailEditor\Engine\Renderer\Renderer;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Initializer;
|
use MailPoet\EmailEditor\Integrations\Core\Initializer;
|
||||||
|
|
||||||
class RendererTest extends \MailPoetTest {
|
class Renderer_Test extends \MailPoetTest {
|
||||||
/** @var Renderer */
|
/** @var Renderer */
|
||||||
private $renderer;
|
private $renderer;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->renderer = $this->diContainer->get(Renderer::class);
|
$this->renderer = $this->diContainer->get(Renderer::class);
|
||||||
$this->diContainer->get(EmailEditor::class)->initialize();
|
$this->diContainer->get(Email_Editor::class)->initialize();
|
||||||
$this->diContainer->get(Initializer::class)->initialize();
|
$this->diContainer->get(Initializer::class)->initialize();
|
||||||
}
|
}
|
||||||
|
|
@ -2,27 +2,27 @@
|
|||||||
|
|
||||||
use Codeception\Stub;
|
use Codeception\Stub;
|
||||||
use MailPoet\EmailEditor\Container;
|
use MailPoet\EmailEditor\Container;
|
||||||
use MailPoet\EmailEditor\Engine\EmailApiController;
|
use MailPoet\EmailEditor\Engine\Email_Api_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\EmailEditor;
|
use MailPoet\EmailEditor\Engine\Email_Editor;
|
||||||
use MailPoet\EmailEditor\Engine\Patterns\Patterns;
|
use MailPoet\EmailEditor\Engine\Patterns\Patterns;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\BlocksRegistry;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Blocks_Registry;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ContentRenderer;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Content_Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\HighlightingPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Highlighting_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\VariablesPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Variables_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\BlocksWidthPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Blocks_Width_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\CleanupPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Cleanup_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\SpacingPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Spacing_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\TypographyPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Typography_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ProcessManager;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Process_Manager;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\Renderer;
|
use MailPoet\EmailEditor\Engine\Renderer\Renderer;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\TemplatePreview;
|
use MailPoet\EmailEditor\Engine\Templates\Template_Preview;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
use MailPoet\EmailEditor\Engine\Templates\Templates;
|
||||||
use MailPoet\EmailEditor\Engine\Templates\Utils;
|
use MailPoet\EmailEditor\Engine\Templates\Utils;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use MailPoet\EmailEditor\Integrations\Core\Initializer;
|
use MailPoet\EmailEditor\Integrations\Core\Initializer;
|
||||||
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
use MailPoet\EmailEditor\Integrations\MailPoet\Blocks\BlockTypesController;
|
||||||
use MailPoet\EmailEditor\Utils\CdnAssetUrl;
|
use MailPoet\EmailEditor\Utils\Cdn_Asset_Url;
|
||||||
|
|
||||||
if ((boolean)getenv('MULTISITE') === true) {
|
if ((boolean)getenv('MULTISITE') === true) {
|
||||||
// REQUEST_URI needs to be set for WP to load the proper subsite where MailPoet is activated
|
// REQUEST_URI needs to be set for WP to load the proper subsite where MailPoet is activated
|
||||||
@ -81,11 +81,11 @@ abstract class MailPoetTest extends \Codeception\TestCase\Test { // phpcs:ignore
|
|||||||
$container->set(Initializer::class, function() {
|
$container->set(Initializer::class, function() {
|
||||||
return new Initializer();
|
return new Initializer();
|
||||||
});
|
});
|
||||||
$container->set(CdnAssetUrl::class, function() {
|
$container->set(Cdn_Asset_Url::class, function() {
|
||||||
return new CdnAssetUrl('http://localhost');
|
return new Cdn_Asset_Url('http://localhost');
|
||||||
});
|
});
|
||||||
$container->set(EmailApiController::class, function() {
|
$container->set(Email_Api_Controller::class, function() {
|
||||||
return new EmailApiController();
|
return new Email_Api_Controller();
|
||||||
});
|
});
|
||||||
$container->set(BlockTypesController::class, function() {
|
$container->set(BlockTypesController::class, function() {
|
||||||
return $this->createMock(BlockTypesController::class);
|
return $this->createMock(BlockTypesController::class);
|
||||||
@ -94,83 +94,83 @@ abstract class MailPoetTest extends \Codeception\TestCase\Test { // phpcs:ignore
|
|||||||
$container->set(Utils::class, function() {
|
$container->set(Utils::class, function() {
|
||||||
return new Utils();
|
return new Utils();
|
||||||
});
|
});
|
||||||
$container->set(ThemeController::class, function() {
|
$container->set(Theme_Controller::class, function() {
|
||||||
return new ThemeController();
|
return new Theme_Controller();
|
||||||
});
|
});
|
||||||
$container->set(SettingsController::class, function ($container) {
|
$container->set(Settings_Controller::class, function ($container) {
|
||||||
return new SettingsController($container->get(ThemeController::class));
|
return new Settings_Controller($container->get(Theme_Controller::class));
|
||||||
});
|
});
|
||||||
$container->set(SettingsController::class, function ($container) {
|
$container->set(Settings_Controller::class, function ($container) {
|
||||||
return new SettingsController($container->get(ThemeController::class));
|
return new Settings_Controller($container->get(Theme_Controller::class));
|
||||||
});
|
});
|
||||||
$container->set(Templates::class, function ($container) {
|
$container->set(Templates::class, function ($container) {
|
||||||
return new Templates($container->get(Utils::class));
|
return new Templates($container->get(Utils::class));
|
||||||
});
|
});
|
||||||
$container->set(TemplatePreview::class, function ($container) {
|
$container->set(Template_Preview::class, function ($container) {
|
||||||
return new TemplatePreview(
|
return new Template_Preview(
|
||||||
$container->get(ThemeController::class),
|
$container->get(Theme_Controller::class),
|
||||||
$container->get(SettingsController::class),
|
$container->get(Settings_Controller::class),
|
||||||
$container->get(Templates::class),
|
$container->get(Templates::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
$container->set(Patterns::class, function ($container) {
|
$container->set(Patterns::class, function ($container) {
|
||||||
return new Patterns(
|
return new Patterns(
|
||||||
$container->get(CdnAssetUrl::class),
|
$container->get(Cdn_Asset_Url::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
$container->set(CleanupPreprocessor::class, function () {
|
$container->set(Cleanup_Preprocessor::class, function () {
|
||||||
return new CleanupPreprocessor();
|
return new Cleanup_Preprocessor();
|
||||||
});
|
});
|
||||||
$container->set(BlocksWidthPreprocessor::class, function () {
|
$container->set(Blocks_Width_Preprocessor::class, function () {
|
||||||
return new BlocksWidthPreprocessor();
|
return new Blocks_Width_Preprocessor();
|
||||||
});
|
});
|
||||||
$container->set(TypographyPreprocessor::class, function ($container) {
|
$container->set(Typography_Preprocessor::class, function ($container) {
|
||||||
return new TypographyPreprocessor($container->get(SettingsController::class));
|
return new Typography_Preprocessor($container->get(Settings_Controller::class));
|
||||||
});
|
});
|
||||||
$container->set(SpacingPreprocessor::class, function () {
|
$container->set(Spacing_Preprocessor::class, function () {
|
||||||
return new SpacingPreprocessor();
|
return new Spacing_Preprocessor();
|
||||||
});
|
});
|
||||||
$container->set(HighlightingPostprocessor::class, function () {
|
$container->set(Highlighting_Postprocessor::class, function () {
|
||||||
return new HighlightingPostprocessor();
|
return new Highlighting_Postprocessor();
|
||||||
});
|
});
|
||||||
$container->set(VariablesPostprocessor::class, function ($container) {
|
$container->set(Variables_Postprocessor::class, function ($container) {
|
||||||
return new VariablesPostprocessor($container->get(ThemeController::class));
|
return new Variables_Postprocessor($container->get(Theme_Controller::class));
|
||||||
});
|
});
|
||||||
$container->set(ProcessManager::class, function ($container) {
|
$container->set(Process_Manager::class, function ($container) {
|
||||||
return new ProcessManager(
|
return new Process_Manager(
|
||||||
$container->get(CleanupPreprocessor::class),
|
$container->get(Cleanup_Preprocessor::class),
|
||||||
$container->get(BlocksWidthPreprocessor::class),
|
$container->get(Blocks_Width_Preprocessor::class),
|
||||||
$container->get(TypographyPreprocessor::class),
|
$container->get(Typography_Preprocessor::class),
|
||||||
$container->get(SpacingPreprocessor::class),
|
$container->get(Spacing_Preprocessor::class),
|
||||||
$container->get(HighlightingPostprocessor::class),
|
$container->get(Highlighting_Postprocessor::class),
|
||||||
$container->get(VariablesPostprocessor::class),
|
$container->get(Variables_Postprocessor::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
$container->set(BlocksRegistry::class, function() {
|
$container->set(Blocks_Registry::class, function() {
|
||||||
return new BlocksRegistry();
|
return new Blocks_Registry();
|
||||||
});
|
});
|
||||||
$container->set(ContentRenderer::class, function ($container) {
|
$container->set(Content_Renderer::class, function ($container) {
|
||||||
return new ContentRenderer(
|
return new Content_Renderer(
|
||||||
$container->get(ProcessManager::class),
|
$container->get(Process_Manager::class),
|
||||||
$container->get(BlocksRegistry::class),
|
$container->get(Blocks_Registry::class),
|
||||||
$container->get(SettingsController::class),
|
$container->get(Settings_Controller::class),
|
||||||
$container->get(ThemeController::class),
|
$container->get(Theme_Controller::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
$container->set(Renderer::class, function ($container) {
|
$container->set(Renderer::class, function ($container) {
|
||||||
return new Renderer(
|
return new Renderer(
|
||||||
$container->get(ContentRenderer::class),
|
$container->get(Content_Renderer::class),
|
||||||
$container->get(Templates::class),
|
$container->get(Templates::class),
|
||||||
$container->get(ThemeController::class),
|
$container->get(Theme_Controller::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
$container->set(EmailEditor::class, function ($container) {
|
$container->set(Email_Editor::class, function ($container) {
|
||||||
return new EmailEditor(
|
return new Email_Editor(
|
||||||
$container->get(EmailApiController::class),
|
$container->get(Email_Api_Controller::class),
|
||||||
$container->get(Templates::class),
|
$container->get(Templates::class),
|
||||||
$container->get(TemplatePreview::class),
|
$container->get(Template_Preview::class),
|
||||||
$container->get(Patterns::class),
|
$container->get(Patterns::class),
|
||||||
$container->get(SettingsController::class),
|
$container->get(Settings_Controller::class),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use Exception;
|
|||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
|
||||||
class ContainerTest extends TestCase {
|
class Container_Test extends TestCase {
|
||||||
public function testSetAndGetService(): void {
|
public function testSetAndGetService(): void {
|
||||||
$container = new Container();
|
$container = new Container();
|
||||||
|
|
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Postprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Postprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\HighlightingPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Highlighting_Postprocessor;
|
||||||
|
|
||||||
class HighlightingPostprocessorTest extends \MailPoetUnitTest {
|
class Highlighting_Postprocessor_Test extends \MailPoetUnitTest {
|
||||||
/** @var HighlightingPostprocessor */
|
/** @var Highlighting_Postprocessor */
|
||||||
private $postprocessor;
|
private $postprocessor;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->postprocessor = new HighlightingPostprocessor();
|
$this->postprocessor = new Highlighting_Postprocessor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReplacesHtmlElements(): void {
|
public function testItReplacesHtmlElements(): void {
|
@ -2,20 +2,20 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Postprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Postprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\VariablesPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Variables_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\ThemeController;
|
use MailPoet\EmailEditor\Engine\Theme_Controller;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
|
||||||
class VariablesPostprocessorTest extends \MailPoetUnitTest {
|
class Variables_Postprocessor_Test extends \MailPoetUnitTest {
|
||||||
private VariablesPostprocessor $postprocessor;
|
private Variables_Postprocessor $postprocessor;
|
||||||
|
|
||||||
/** @var ThemeController & MockObject */
|
/** @var Theme_Controller & MockObject */
|
||||||
private $themeControllerMock;
|
private $themeControllerMock;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->themeControllerMock = $this->createMock(ThemeController::class);
|
$this->themeControllerMock = $this->createMock(Theme_Controller::class);
|
||||||
$this->postprocessor = new VariablesPostprocessor($this->themeControllerMock);
|
$this->postprocessor = new Variables_Postprocessor($this->themeControllerMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReplacesVariablesInStyleAttributes(): void {
|
public function testItReplacesVariablesInStyleAttributes(): void {
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\BlocksWidthPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Blocks_Width_Preprocessor;
|
||||||
|
|
||||||
class BlocksWidthPreprocessorTest extends \MailPoetUnitTest {
|
class Blocks_Width_Preprocessor_Test extends \MailPoetUnitTest {
|
||||||
|
|
||||||
/** @var BlocksWidthPreprocessor */
|
/** @var Blocks_Width_Preprocessor */
|
||||||
private $preprocessor;
|
private $preprocessor;
|
||||||
|
|
||||||
/** @var array{contentSize: string} */
|
/** @var array{contentSize: string} */
|
||||||
@ -17,7 +17,7 @@ class BlocksWidthPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->preprocessor = new BlocksWidthPreprocessor();
|
$this->preprocessor = new Blocks_Width_Preprocessor();
|
||||||
$this->layout = ['contentSize' => '660px'];
|
$this->layout = ['contentSize' => '660px'];
|
||||||
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
||||||
}
|
}
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\CleanupPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Cleanup_Preprocessor;
|
||||||
|
|
||||||
class CleanupPreprocessorTest extends \MailPoetUnitTest {
|
class Cleanup_Preprocessor_Test extends \MailPoetUnitTest {
|
||||||
|
|
||||||
private const PARAGRAPH_BLOCK = [
|
private const PARAGRAPH_BLOCK = [
|
||||||
'blockName' => 'core/paragraph',
|
'blockName' => 'core/paragraph',
|
||||||
@ -22,7 +22,7 @@ class CleanupPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
]],
|
]],
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var CleanupPreprocessor */
|
/** @var Cleanup_Preprocessor */
|
||||||
private $preprocessor;
|
private $preprocessor;
|
||||||
|
|
||||||
/** @var array{contentSize: string} */
|
/** @var array{contentSize: string} */
|
||||||
@ -33,7 +33,7 @@ class CleanupPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->preprocessor = new CleanupPreprocessor();
|
$this->preprocessor = new Cleanup_Preprocessor();
|
||||||
$this->layout = ['contentSize' => '660px'];
|
$this->layout = ['contentSize' => '660px'];
|
||||||
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
||||||
}
|
}
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\SpacingPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Spacing_Preprocessor;
|
||||||
|
|
||||||
class SpacingPreprocessorTest extends \MailPoetUnitTest {
|
class Spacing_Preprocessor_Test extends \MailPoetUnitTest {
|
||||||
|
|
||||||
/** @var SpacingPreprocessor */
|
/** @var Spacing_Preprocessor */
|
||||||
private $preprocessor;
|
private $preprocessor;
|
||||||
|
|
||||||
/** @var array{contentSize: string} */
|
/** @var array{contentSize: string} */
|
||||||
@ -17,7 +17,7 @@ class SpacingPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->preprocessor = new SpacingPreprocessor();
|
$this->preprocessor = new Spacing_Preprocessor();
|
||||||
$this->layout = ['contentSize' => '660px'];
|
$this->layout = ['contentSize' => '660px'];
|
||||||
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
||||||
}
|
}
|
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
namespace MailPoet\EmailEditor\Engine\Renderer\Preprocessors;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\TypographyPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Typography_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\SettingsController;
|
use MailPoet\EmailEditor\Engine\Settings_Controller;
|
||||||
|
|
||||||
class TypographyPreprocessorTest extends \MailPoetUnitTest {
|
class Typography_Preprocessor_Test extends \MailPoetUnitTest {
|
||||||
|
|
||||||
/** @var TypographyPreprocessor */
|
/** @var Typography_Preprocessor */
|
||||||
private $preprocessor;
|
private $preprocessor;
|
||||||
|
|
||||||
/** @var array{contentSize: string} */
|
/** @var array{contentSize: string} */
|
||||||
@ -18,7 +18,7 @@ class TypographyPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$settingsMock = $this->createMock(SettingsController::class);
|
$settingsMock = $this->createMock(Settings_Controller::class);
|
||||||
$themeMock = $this->createMock(\WP_Theme_JSON::class);
|
$themeMock = $this->createMock(\WP_Theme_JSON::class);
|
||||||
$themeMock->method('get_data')->willReturn([
|
$themeMock->method('get_data')->willReturn([
|
||||||
'styles' => [
|
'styles' => [
|
||||||
@ -52,7 +52,7 @@ class TypographyPreprocessorTest extends \MailPoetUnitTest {
|
|||||||
$settingsMock->method('translateSlugToFontSize')->willReturnCallback(function($slug) {
|
$settingsMock->method('translateSlugToFontSize')->willReturnCallback(function($slug) {
|
||||||
return str_replace('slug-', '', $slug);
|
return str_replace('slug-', '', $slug);
|
||||||
});
|
});
|
||||||
$this->preprocessor = new TypographyPreprocessor($settingsMock);
|
$this->preprocessor = new Typography_Preprocessor($settingsMock);
|
||||||
$this->layout = ['contentSize' => '660px'];
|
$this->layout = ['contentSize' => '660px'];
|
||||||
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
$this->styles = ['spacing' => ['padding' => ['left' => '10px', 'right' => '10px', 'top' => '10px', 'bottom' => '10px'], 'blockGap' => '10px']];
|
||||||
}
|
}
|
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine\Renderer;
|
namespace MailPoet\EmailEditor\Engine\Renderer;
|
||||||
|
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\HighlightingPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Highlighting_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\VariablesPostprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Postprocessors\Variables_Postprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\BlocksWidthPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Blocks_Width_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\CleanupPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Cleanup_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\SpacingPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Spacing_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\TypographyPreprocessor;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Preprocessors\Typography_Preprocessor;
|
||||||
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ProcessManager;
|
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\Process_Manager;
|
||||||
|
|
||||||
class ProcessManagerTest extends \MailPoetUnitTest {
|
class Process_Manager_Test extends \MailPoetUnitTest {
|
||||||
public function testItCallsPreprocessorsProperly(): void {
|
public function testItCallsPreprocessorsProperly(): void {
|
||||||
$layout = [
|
$layout = [
|
||||||
'contentSize' => '600px',
|
'contentSize' => '600px',
|
||||||
@ -27,25 +27,25 @@ class ProcessManagerTest extends \MailPoetUnitTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
$cleanup = $this->createMock(CleanupPreprocessor::class);
|
$cleanup = $this->createMock(Cleanup_Preprocessor::class);
|
||||||
$cleanup->expects($this->once())->method('preprocess')->willReturn([]);
|
$cleanup->expects($this->once())->method('preprocess')->willReturn([]);
|
||||||
|
|
||||||
$blocksWidth = $this->createMock(BlocksWidthPreprocessor::class);
|
$blocksWidth = $this->createMock(Blocks_Width_Preprocessor::class);
|
||||||
$blocksWidth->expects($this->once())->method('preprocess')->willReturn([]);
|
$blocksWidth->expects($this->once())->method('preprocess')->willReturn([]);
|
||||||
|
|
||||||
$typography = $this->createMock(TypographyPreprocessor::class);
|
$typography = $this->createMock(Typography_Preprocessor::class);
|
||||||
$typography->expects($this->once())->method('preprocess')->willReturn([]);
|
$typography->expects($this->once())->method('preprocess')->willReturn([]);
|
||||||
|
|
||||||
$spacing = $this->createMock(SpacingPreprocessor::class);
|
$spacing = $this->createMock(Spacing_Preprocessor::class);
|
||||||
$spacing->expects($this->once())->method('preprocess')->willReturn([]);
|
$spacing->expects($this->once())->method('preprocess')->willReturn([]);
|
||||||
|
|
||||||
$highlighting = $this->createMock(HighlightingPostprocessor::class);
|
$highlighting = $this->createMock(Highlighting_Postprocessor::class);
|
||||||
$highlighting->expects($this->once())->method('postprocess')->willReturn('');
|
$highlighting->expects($this->once())->method('postprocess')->willReturn('');
|
||||||
|
|
||||||
$variables = $this->createMock(VariablesPostprocessor::class);
|
$variables = $this->createMock(Variables_Postprocessor::class);
|
||||||
$variables->expects($this->once())->method('postprocess')->willReturn('');
|
$variables->expects($this->once())->method('postprocess')->willReturn('');
|
||||||
|
|
||||||
$processManager = new ProcessManager($cleanup, $blocksWidth, $typography, $spacing, $highlighting, $variables);
|
$processManager = new Process_Manager($cleanup, $blocksWidth, $typography, $spacing, $highlighting, $variables);
|
||||||
$this->assertEquals([], $processManager->preprocess([], $layout, $styles));
|
$this->assertEquals([], $processManager->preprocess([], $layout, $styles));
|
||||||
$this->assertEmpty($processManager->postprocess(''));
|
$this->assertEmpty($processManager->postprocess(''));
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Engine;
|
namespace MailPoet\EmailEditor\Engine;
|
||||||
|
|
||||||
class SettingsControllerTest extends \MailPoetUnitTest {
|
class Settings_Controller_Test extends \MailPoetUnitTest {
|
||||||
public function testItGetsCorrectLayoutWidthWithoutPadding(): void {
|
public function testItGetsCorrectLayoutWidthWithoutPadding(): void {
|
||||||
$themeJsonMock = $this->createMock(\WP_Theme_JSON::class);
|
$themeJsonMock = $this->createMock(\WP_Theme_JSON::class);
|
||||||
$themeJsonMock->method('get_data')->willReturn([
|
$themeJsonMock->method('get_data')->willReturn([
|
||||||
@ -15,13 +15,13 @@ class SettingsControllerTest extends \MailPoetUnitTest {
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$themeController = $this->createMock(ThemeController::class);
|
$themeController = $this->createMock(Theme_Controller::class);
|
||||||
$themeController->method('getTheme')->willReturn($themeJsonMock);
|
$themeController->method('getTheme')->willReturn($themeJsonMock);
|
||||||
$themeController->method('getLayoutSettings')->willReturn([
|
$themeController->method('getLayoutSettings')->willReturn([
|
||||||
"contentSize" => "660px",
|
"contentSize" => "660px",
|
||||||
"wideSize" => null,
|
"wideSize" => null,
|
||||||
]);
|
]);
|
||||||
$settingsController = new SettingsController($themeController);
|
$settingsController = new Settings_Controller($themeController);
|
||||||
$layoutWidth = $settingsController->getLayoutWidthWithoutPadding();
|
$layoutWidth = $settingsController->getLayoutWidthWithoutPadding();
|
||||||
// default width is 660px and if we subtract padding from left and right we must get the correct value
|
// default width is 660px and if we subtract padding from left and right we must get the correct value
|
||||||
$expectedWidth = 660 - 10 * 2;
|
$expectedWidth = 660 - 10 * 2;
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\EmailEditor\Integrations\Utils;
|
namespace MailPoet\EmailEditor\Integrations\Utils;
|
||||||
|
|
||||||
class DomDocumentHelperTest extends \MailPoetUnitTest {
|
class Dom_Document_Helper_Test extends \MailPoetUnitTest {
|
||||||
public function testItFindsElement(): void {
|
public function testItFindsElement(): void {
|
||||||
$html = '<div><p>Some text</p></div>';
|
$html = '<div><p>Some text</p></div>';
|
||||||
$domDocumentHelper = new DomDocumentHelper($html);
|
$domDocumentHelper = new Dom_Document_Helper($html);
|
||||||
$element = $domDocumentHelper->findElement('p');
|
$element = $domDocumentHelper->findElement('p');
|
||||||
$empty = $domDocumentHelper->findElement('span');
|
$empty = $domDocumentHelper->findElement('span');
|
||||||
$this->assertInstanceOf(\DOMElement::class, $element);
|
$this->assertInstanceOf(\DOMElement::class, $element);
|
||||||
@ -15,7 +15,7 @@ class DomDocumentHelperTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function testItGetsAttributeValue(): void {
|
public function testItGetsAttributeValue(): void {
|
||||||
$html = '<div><p class="some-class">Some text</p></div>';
|
$html = '<div><p class="some-class">Some text</p></div>';
|
||||||
$domDocumentHelper = new DomDocumentHelper($html);
|
$domDocumentHelper = new Dom_Document_Helper($html);
|
||||||
$element = $domDocumentHelper->findElement('p');
|
$element = $domDocumentHelper->findElement('p');
|
||||||
$this->assertInstanceOf(\DOMElement::class, $element);
|
$this->assertInstanceOf(\DOMElement::class, $element);
|
||||||
$this->assertEquals('some-class', $domDocumentHelper->getAttributeValue($element, 'class'));
|
$this->assertEquals('some-class', $domDocumentHelper->getAttributeValue($element, 'class'));
|
||||||
@ -23,14 +23,14 @@ class DomDocumentHelperTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function testItGetsOuterHtml(): void {
|
public function testItGetsOuterHtml(): void {
|
||||||
$html = '<div><span>Some <strong>text</strong></span></div>';
|
$html = '<div><span>Some <strong>text</strong></span></div>';
|
||||||
$domDocumentHelper = new DomDocumentHelper($html);
|
$domDocumentHelper = new Dom_Document_Helper($html);
|
||||||
$element = $domDocumentHelper->findElement('span');
|
$element = $domDocumentHelper->findElement('span');
|
||||||
$this->assertInstanceOf(\DOMElement::class, $element);
|
$this->assertInstanceOf(\DOMElement::class, $element);
|
||||||
$this->assertEquals('<span>Some <strong>text</strong></span>', $domDocumentHelper->getOuterHtml($element));
|
$this->assertEquals('<span>Some <strong>text</strong></span>', $domDocumentHelper->getOuterHtml($element));
|
||||||
|
|
||||||
// testings encoding of special characters
|
// testings encoding of special characters
|
||||||
$html = '<div><img src="https://test.com/DALL·E-A®∑oecasƒ-803x1024.jpg"></div>';
|
$html = '<div><img src="https://test.com/DALL·E-A®∑oecasƒ-803x1024.jpg"></div>';
|
||||||
$domDocumentHelper = new DomDocumentHelper($html);
|
$domDocumentHelper = new Dom_Document_Helper($html);
|
||||||
$element = $domDocumentHelper->findElement('img');
|
$element = $domDocumentHelper->findElement('img');
|
||||||
$this->assertInstanceOf(\DOMElement::class, $element);
|
$this->assertInstanceOf(\DOMElement::class, $element);
|
||||||
$this->assertEquals('<img src="https://test.com/DALL%C2%B7E-A%C2%AE%E2%88%91oecas%C6%92-803x1024.jpg">', $domDocumentHelper->getOuterHtml($element));
|
$this->assertEquals('<img src="https://test.com/DALL%C2%B7E-A%C2%AE%E2%88%91oecas%C6%92-803x1024.jpg">', $domDocumentHelper->getOuterHtml($element));
|
||||||
@ -38,7 +38,7 @@ class DomDocumentHelperTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function testItGetsAttributeValueByTagName(): void {
|
public function testItGetsAttributeValueByTagName(): void {
|
||||||
$html = '<div><p class="some-class">Some text</p><p class="second-paragraph"></p></div>';
|
$html = '<div><p class="some-class">Some text</p><p class="second-paragraph"></p></div>';
|
||||||
$domDocumentHelper = new DomDocumentHelper($html);
|
$domDocumentHelper = new Dom_Document_Helper($html);
|
||||||
$this->assertEquals('some-class', $domDocumentHelper->getAttributeValueByTagName('p', 'class'));
|
$this->assertEquals('some-class', $domDocumentHelper->getAttributeValueByTagName('p', 'class'));
|
||||||
$this->assertNull($domDocumentHelper->getAttributeValueByTagName('span', 'class'));
|
$this->assertNull($domDocumentHelper->getAttributeValueByTagName('span', 'class'));
|
||||||
}
|
}
|
Reference in New Issue
Block a user