Compute heading and link colors based on the base color [MAILPOET-2569]
This commit is contained in:
@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* WooCommerce styles behavior
|
||||||
|
*
|
||||||
|
* Handles relations between different WC style settings (e.g. one color depends on another)
|
||||||
|
*/
|
||||||
|
import Marionette from 'backbone.marionette';
|
||||||
|
import BehaviorsLookup from 'newsletter_editor/behaviors/BehaviorsLookup';
|
||||||
|
|
||||||
|
var BL = BehaviorsLookup;
|
||||||
|
|
||||||
|
BL.WooCommerceStylesBehavior = Marionette.Behavior.extend({
|
||||||
|
events: function () { // eslint-disable-line func-names
|
||||||
|
return {
|
||||||
|
'change #mailpoet_wc_branding_color': function (event) { // eslint-disable-line func-names
|
||||||
|
let linkFontColor;
|
||||||
|
const brandingColor = event.target.value;
|
||||||
|
const headingFontColor = (this.wcHexIsLight(brandingColor)) ? '#202020' : '#ffffff';
|
||||||
|
if (this.wcHexIsLight(this.view.model.get('wrapper.backgroundColor'))) {
|
||||||
|
linkFontColor = (this.wcHexIsLight(brandingColor)) ? headingFontColor : brandingColor;
|
||||||
|
} else {
|
||||||
|
linkFontColor = (this.wcHexIsLight(brandingColor)) ? brandingColor : headingFontColor;
|
||||||
|
}
|
||||||
|
this.view.model.set('woocommerce.brandingColor', brandingColor);
|
||||||
|
this.view.model.set('woocommerce.headingFontColor', headingFontColor);
|
||||||
|
this.view.model.set('link.fontColor', linkFontColor);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
// This is the wc_hex_is_light() WooCommerce function ported from PHP to JS.
|
||||||
|
// Taken from https://stackoverflow.com/a/51567564
|
||||||
|
wcHexIsLight: function (color) { // eslint-disable-line func-names
|
||||||
|
const hex = color.replace('#', '');
|
||||||
|
const colR = parseInt(hex.substr(0, 2), 16);
|
||||||
|
const colG = parseInt(hex.substr(2, 2), 16);
|
||||||
|
const colB = parseInt(hex.substr(4, 2), 16);
|
||||||
|
const brightness = ((colR * 299) + (colG * 587) + (colB * 114)) / 1000;
|
||||||
|
return brightness > 155;
|
||||||
|
},
|
||||||
|
});
|
@ -170,6 +170,7 @@ Module.SidebarStylesView = Marionette.View.extend({
|
|||||||
getTemplate: function () { return window.templates.sidebarStyles; },
|
getTemplate: function () { return window.templates.sidebarStyles; },
|
||||||
behaviors: {
|
behaviors: {
|
||||||
ColorPickerBehavior: {},
|
ColorPickerBehavior: {},
|
||||||
|
WooCommerceStylesBehavior: {},
|
||||||
},
|
},
|
||||||
events: function () {
|
events: function () {
|
||||||
return {
|
return {
|
||||||
@ -215,9 +216,6 @@ 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 () {
|
||||||
|
@ -33,6 +33,7 @@ import 'newsletter_editor/behaviors/ResizableBehavior.js'; // side effect - assi
|
|||||||
import 'newsletter_editor/behaviors/SortableBehavior.js'; // side effect - assigns to BehaviorsLookup
|
import 'newsletter_editor/behaviors/SortableBehavior.js'; // side effect - assigns to BehaviorsLookup
|
||||||
import 'newsletter_editor/behaviors/ShowSettingsBehavior.js'; // side effect - assigns to BehaviorsLookup
|
import 'newsletter_editor/behaviors/ShowSettingsBehavior.js'; // side effect - assigns to BehaviorsLookup
|
||||||
import 'newsletter_editor/behaviors/TextEditorBehavior.js'; // side effect - assigns to BehaviorsLookup
|
import 'newsletter_editor/behaviors/TextEditorBehavior.js'; // side effect - assigns to BehaviorsLookup
|
||||||
|
import 'newsletter_editor/behaviors/WooCommerceStylesBehavior.js'; // side effect - assigns to BehaviorsLookup
|
||||||
|
|
||||||
// blocks
|
// blocks
|
||||||
import 'newsletter_editor/blocks/container.js'; // side effect - calls App.on()
|
import 'newsletter_editor/blocks/container.js'; // side effect - calls App.on()
|
||||||
|
Reference in New Issue
Block a user