Add global styles for use in WC header and content blocks [MAILPOET-2521]

This commit is contained in:
wxa
2019-12-09 21:20:58 +03:00
committed by Jack Kitterhing
parent b4ed775a97
commit ed6bc90754
13 changed files with 67 additions and 49 deletions

View File

@ -77,11 +77,6 @@ SidebarView = Marionette.View.extend({
} }
}, },
}, },
templateContext: function () {
return {
isWoocommerceTransactional: this.model.isWoocommerceTransactional(),
};
},
initialize: function () { initialize: function () {
jQuery(window) jQuery(window)
.on('resize', this.updateHorizontalScroll.bind(this)) .on('resize', this.updateHorizontalScroll.bind(this))
@ -97,6 +92,7 @@ SidebarView = Marionette.View.extend({
this.showChildView('stylesRegion', new Module.SidebarStylesView({ this.showChildView('stylesRegion', new Module.SidebarStylesView({
model: App.getGlobalStyles(), model: App.getGlobalStyles(),
availableStyles: App.getAvailableStyles(), availableStyles: App.getAvailableStyles(),
isWoocommerceTransactional: this.model.isWoocommerceTransactional(),
})); }));
this.showChildView('previewRegion', new Module.SidebarPreviewView()); this.showChildView('previewRegion', new Module.SidebarPreviewView());
}, },
@ -213,16 +209,21 @@ Module.SidebarStylesView = Marionette.View.extend({
}, },
'change #mailpoet_newsletter_background_color': _.partial(this.changeColorField, 'wrapper.backgroundColor'), 'change #mailpoet_newsletter_background_color': _.partial(this.changeColorField, 'wrapper.backgroundColor'),
'change #mailpoet_background_color': _.partial(this.changeColorField, 'body.backgroundColor'), 'change #mailpoet_background_color': _.partial(this.changeColorField, 'body.backgroundColor'),
// WooCommerce styles
'change #mailpoet_wc_heading_font_color': _.partial(this.changeColorField, 'woocommerce.headingFontColor'),
'change #mailpoet_wc_branding_color': _.partial(this.changeColorField, 'woocommerce.brandingColor'),
}; };
}, },
templateContext: function () { templateContext: function () {
return { return {
model: this.model.toJSON(), model: this.model.toJSON(),
availableStyles: this.availableStyles.toJSON(), availableStyles: this.availableStyles.toJSON(),
isWoocommerceTransactional: this.isWoocommerceTransactional,
}; };
}, },
initialize: function (options) { initialize: function (options) {
this.availableStyles = options.availableStyles; this.availableStyles = options.availableStyles;
this.isWoocommerceTransactional = options.isWoocommerceTransactional;
App.getChannel().on('historyUpdate', this.render); App.getChannel().on('historyUpdate', this.render);
}, },
changeField: function (field, event) { changeField: function (field, event) {

View File

@ -57,12 +57,20 @@ Module.StylesModel = SuperModel.extend({
Module.StylesView = Marionette.View.extend({ Module.StylesView = Marionette.View.extend({
getTemplate: function () { return window.templates.styles; }, // eslint-disable-line func-names getTemplate: function () { return window.templates.styles; }, // eslint-disable-line func-names
templateContext: function () { // eslint-disable-line func-names
return {
isWoocommerceTransactional: this.isWoocommerceTransactional,
};
},
modelEvents: { modelEvents: {
change: 'render', change: 'render',
}, },
serializeData: function () { // eslint-disable-line func-names serializeData: function () { // eslint-disable-line func-names
return this.model.toJSON(); return this.model.toJSON();
}, },
initialize: function (options) { // eslint-disable-line func-names
this.isWoocommerceTransactional = options.isWoocommerceTransactional;
},
}); });
Module._globalStyles = new SuperModel(); Module._globalStyles = new SuperModel();
@ -92,7 +100,10 @@ App.on('before:start', function (BeforeStartApp, options) { // eslint-disable-li
}); });
App.on('start', function (StartApp) { // eslint-disable-line func-names App.on('start', function (StartApp) { // eslint-disable-line func-names
var stylesView = new Module.StylesView({ model: StartApp.getGlobalStyles() }); var stylesView = new Module.StylesView({
model: StartApp.getGlobalStyles(),
isWoocommerceTransactional: App.getNewsletter().isWoocommerceTransactional(),
});
StartApp._appView.showChildView('stylesRegion', stylesView); StartApp._appView.showChildView('stylesRegion', stylesView);
}); });

View File

@ -23,6 +23,9 @@ class TransactionalEmails {
/** @var Template */ /** @var Template */
private $template; private $template;
/** @var Helper */
private $woocommerce_helper;
/** @var Renderer */ /** @var Renderer */
private $renderer; private $renderer;
@ -32,11 +35,12 @@ class TransactionalEmails {
/** @var NewslettersRepository */ /** @var NewslettersRepository */
private $newsletters_repository; private $newsletters_repository;
function __construct(WPFunctions $wp, SettingsController $settings, Template $template, Renderer $renderer, NewslettersRepository $newsletters_repository) { function __construct(WPFunctions $wp, SettingsController $settings, Template $template, Renderer $renderer, Helper $woocommerce_helper, NewslettersRepository $newsletters_repository) {
$this->wp = $wp; $this->wp = $wp;
$this->settings = $settings; $this->settings = $settings;
$this->template = $template; $this->template = $template;
$this->renderer = $renderer; $this->renderer = $renderer;
$this->woocommerce_helper = $woocommerce_helper;
$this->newsletters_repository = $newsletters_repository; $this->newsletters_repository = $newsletters_repository;
$this->email_headings = [ $this->email_headings = [
'new_account' => [ 'new_account' => [
@ -140,6 +144,7 @@ class TransactionalEmails {
$key = preg_replace('/^woocommerce_email_/', '', $name); $key = preg_replace('/^woocommerce_email_/', '', $name);
$result[$key] = $value ?: $default; $result[$key] = $value ?: $default;
} }
$result['base_text_color'] = $this->woocommerce_helper->wcLightOrDark($result['base_color'], '#202020', '#ffffff');
$result['footer_text'] = $this->replacePlaceholders($result['footer_text']); $result['footer_text'] = $this->replacePlaceholders($result['footer_text']);
return $result; return $result;
} }

View File

@ -330,6 +330,11 @@ class Template {
[ [
'backgroundColor' => $wc_email_settings['background_color'], 'backgroundColor' => $wc_email_settings['background_color'],
], ],
'woocommerce' =>
[
'brandingColor' => $wc_email_settings['base_color'],
'headingFontColor' => $wc_email_settings['base_text_color'],
],
], ],
'blockDefaults' => 'blockDefaults' =>
[ [

View File

@ -9,6 +9,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Renderer;
use MailPoet\WooCommerce\TransactionalEmails\Template; use MailPoet\WooCommerce\TransactionalEmails\Template;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@ -40,6 +41,7 @@ class TransactionalEmailsTest extends \MailPoetTest {
$this->settings, $this->settings,
ContainerWrapper::getInstance()->get(Template::class), ContainerWrapper::getInstance()->get(Template::class),
ContainerWrapper::getInstance()->get(Renderer::class), ContainerWrapper::getInstance()->get(Renderer::class),
Stub::makeEmpty(WooCommerceHelper::class),
$this->newsletters_repository $this->newsletters_repository
); );
} }
@ -71,6 +73,7 @@ class TransactionalEmailsTest extends \MailPoetTest {
$this->settings, $this->settings,
ContainerWrapper::getInstance()->get(Template::class), ContainerWrapper::getInstance()->get(Template::class),
ContainerWrapper::getInstance()->get(Renderer::class), ContainerWrapper::getInstance()->get(Renderer::class),
Stub::makeEmpty(WooCommerceHelper::class),
$this->newsletters_repository $this->newsletters_repository
); );
$transactional_emails->init(); $transactional_emails->init();
@ -130,6 +133,7 @@ class TransactionalEmailsTest extends \MailPoetTest {
$this->settings, $this->settings,
ContainerWrapper::getInstance()->get(Template::class), ContainerWrapper::getInstance()->get(Template::class),
$renderer, $renderer,
Stub::makeEmpty(WooCommerceHelper::class),
ContainerWrapper::getInstance()->get(NewslettersRepository::class) ContainerWrapper::getInstance()->get(NewslettersRepository::class)
); );
$transactional_emails->useTemplateForWoocommerceEmails(); $transactional_emails->useTemplateForWoocommerceEmails();

View File

@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Renderer;
use MailPoet\WooCommerce\TransactionalEmails\Template; use MailPoet\WooCommerce\TransactionalEmails\Template;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@ -37,8 +38,9 @@ class TransactionalEmailsTest extends \MailPoetUnitTest {
$settings = Stub::make(SettingsController::class); $settings = Stub::make(SettingsController::class);
$template = Stub::make(Template::class); $template = Stub::make(Template::class);
$renderer = Stub::make(Renderer::class); $renderer = Stub::make(Renderer::class);
$woocommerce_helper = Stub::make(WooCommerceHelper::class);
$newsletters_repository = Stub::make(NewslettersRepository::class); $newsletters_repository = Stub::make(NewslettersRepository::class);
$transactional_emails = new TransactionalEmails($wp, $settings, $template, $renderer, $newsletters_repository); $transactional_emails = new TransactionalEmails($wp, $settings, $template, $renderer, $woocommerce_helper, $newsletters_repository);
expect($transactional_emails->getEmailHeadings())->equals([ expect($transactional_emails->getEmailHeadings())->equals([
'new_account' => 'Test: New Order: #0001', 'new_account' => 'Test: New Order: #0001',
'processing_order' => 'Thank you for your order', 'processing_order' => 'Thank you for your order',

View File

@ -1,11 +1,4 @@
<div class="mailpoet_tools"></div> <div class="mailpoet_tools"></div>
<style type="text/css">
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h1,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h2,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h3 {
color: {{ styles.titleColor }};
}
</style>
<div class="mailpoet_woocommerce_content_overlay"> <div class="mailpoet_woocommerce_content_overlay">
<p><%= __('This content will be autogenerated by WooCommerce') %></p> <p><%= __('This content will be autogenerated by WooCommerce') %></p>
</div> </div>

View File

@ -1,11 +1,4 @@
<div class="mailpoet_tools"></div> <div class="mailpoet_tools"></div>
<style type="text/css">
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h1,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h2,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h3 {
color: {{ styles.titleColor }};
}
</style>
<div class="mailpoet_woocommerce_content_overlay"> <div class="mailpoet_woocommerce_content_overlay">
<p><%= __('This content will be autogenerated by WooCommerce') %></p> <p><%= __('This content will be autogenerated by WooCommerce') %></p>
</div> </div>

View File

@ -1,11 +1,4 @@
<div class="mailpoet_tools"></div> <div class="mailpoet_tools"></div>
<style type="text/css">
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h1,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h2,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h3 {
color: {{ styles.titleColor }};
}
</style>
<div class="mailpoet_woocommerce_content_overlay"> <div class="mailpoet_woocommerce_content_overlay">
<p><%= __('This content will be autogenerated by WooCommerce') %></p> <p><%= __('This content will be autogenerated by WooCommerce') %></p>
</div> </div>

View File

@ -1,11 +1,4 @@
<div class="mailpoet_tools"></div> <div class="mailpoet_tools"></div>
<style type="text/css">
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h1,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h2,
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h3 {
color: {{ styles.titleColor }};
}
</style>
<div class="mailpoet_woocommerce_content_overlay"> <div class="mailpoet_woocommerce_content_overlay">
<p><%= __('This content will be autogenerated by WooCommerce') %></p> <p><%= __('This content will be autogenerated by WooCommerce') %></p>
</div> </div>

View File

@ -1,17 +1,4 @@
<div class="mailpoet_tools"></div> <div class="mailpoet_tools"></div>
<style type="text/css">
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content {
padding: 30px 20px;
background: {{ styles.backgroundColor }};
}
.mailpoet_editor_view_{{ viewCid }} .mailpoet_content h1 {
line-height: 1.2em;
font-family: 'Source Sans Pro';
font-size: 36px;
color: {{ styles.fontColor }};
margin: 0;
}
</style>
<div class="mailpoet_woocommerce_heading_overlay"> <div class="mailpoet_woocommerce_heading_overlay">
<p><%= __('This content will be autogenerated by WooCommerce') %></p> <p><%= __('This content will be autogenerated by WooCommerce') %></p>
</div> </div>

View File

@ -2,6 +2,19 @@
<h3><%= __('Styles') %></h3> <h3><%= __('Styles') %></h3>
<div class="mailpoet_region_content"> <div class="mailpoet_region_content">
<form id="mailpoet_newsletter_styles" action="" method="post" accept-charset="utf-8"> <form id="mailpoet_newsletter_styles" action="" method="post" accept-charset="utf-8">
{{#if isWoocommerceTransactional}}
<div class="mailpoet_form_field">
<span>
<span><input type="text" class="mailpoet_color" size="6" maxlength="6" name="wc-heading-font-color" value="{{ model.woocommerce.headingFontColor }}" id="mailpoet_wc_heading_font_color"></span>
</span><%= __('Heading font color') %>
</div>
<div class="mailpoet_form_field">
<span>
<span><input type="text" class="mailpoet_color" size="6" maxlength="6" name="wc-branding-color" value="{{ model.woocommerce.brandingColor }}" id="mailpoet_wc_branding_color"></span>
</span><%= __('Branding color') %>
</div>
<hr />
{{/if}}
<div class="mailpoet_form_field mailpoet_form_narrow_select2"> <div class="mailpoet_form_field mailpoet_form_narrow_select2">
<span> <span>
<span><input type="text" class="mailpoet_color" size="6" maxlength="6" name="text-color" value="{{ model.text.fontColor }}" id="mailpoet_text_font_color"></span> <span><input type="text" class="mailpoet_color" size="6" maxlength="6" name="text-color" value="{{ model.text.fontColor }}" id="mailpoet_text_font_color"></span>

View File

@ -34,4 +34,22 @@
#mailpoet_editor_main_wrapper { #mailpoet_editor_main_wrapper {
background-color: {{ body.backgroundColor }}; background-color: {{ body.backgroundColor }};
} }
{{#if isWoocommerceTransactional}}
.mailpoet_woocommerce_heading {
padding: 30px 20px;
background: {{ woocommerce.brandingColor }};
}
.mailpoet_woocommerce_heading h1 {
line-height: 1.2em;
font-family: 'Source Sans Pro';
font-size: 36px;
color: {{ woocommerce.headingFontColor }};
margin: 0;
}
.mailpoet_woocommerce_content h1,
.mailpoet_woocommerce_content h2,
.mailpoet_woocommerce_content h3 {
color: {{ styles.titleColor }};
}
{{/if}}
</style> </style>