Skip to content

Commit 5235ed5

Browse files
Implement inline styles conversion
- replace class with attribute - add minified library - fix style adding in preview style binding
1 parent 0a44f7d commit 5235ed5

File tree

13 files changed

+89
-64
lines changed

13 files changed

+89
-64
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/binding/master-style.js

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/binding/style.js

Lines changed: 6 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/style-registry.js

Lines changed: 21 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/master-format/render/frame.js

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/resource/csso/csso.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/stage-builder.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/utils/string.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/binding/master-style.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import ko from "knockout";
77
import utils from "mageUtils";
88
import _ from "underscore";
9-
import {getStyleRegistry} from "../content-type/style-registry";
9+
import {getStyleRegistry, pbStyleAttribute} from "../content-type/style-registry";
1010

1111
ko.bindingHandlers.style = {
1212
update: (element: HTMLElement, valueAccessor, allBindings, viewModel, bindingContext) => {
@@ -26,11 +26,12 @@ ko.bindingHandlers.style = {
2626
});
2727

2828
if (!_.isEmpty(styles)) {
29-
const className = "style-" + utils.uniqueid();
29+
const id = utils.uniqueid();
30+
const selector = `[${pbStyleAttribute}="${id}"]`;
3031
const registry = getStyleRegistry(bindingContext.$root.id);
3132

32-
registry.setStyles(className, styles);
33-
element.classList.add(className);
33+
registry.setStyles(selector, styles);
34+
element.setAttribute(pbStyleAttribute, id);
3435
}
3536

3637
},

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/binding/style.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import ko from "knockout";
77
import utils from "mageUtils";
88
import _ from "underscore";
9-
import {generateCssBlock} from "../content-type/style-registry";
9+
import {generateCssBlock, pbStyleAttribute, styleDataAttribute} from "../content-type/style-registry";
1010

1111
const originalStyle: KnockoutBindingHandler = ko.bindingHandlers.style;
1212

@@ -17,15 +17,15 @@ function isPageBuilderContext(context: {[key: string]: any}): boolean {
1717
ko.bindingHandlers.style = {
1818
init: (element, valueAccessor, allBindings, viewModel, bindingContext) => {
1919
if (isPageBuilderContext(bindingContext)) {
20-
element.setAttribute("data-style-id", utils.uniqueid());
20+
element.setAttribute(pbStyleAttribute, utils.uniqueid());
2121
}
2222
},
2323
update: (element: HTMLElement, valueAccessor, allBindings, viewModel, bindingContext) => {
2424
if (isPageBuilderContext(bindingContext)) {
2525
const value = ko.utils.unwrapObservable(valueAccessor() || {});
2626
const styles: { [key: string]: any; } = {};
27-
const className = "style-" + element.getAttribute("data-style-id");
28-
const existedStyleBlock = document.querySelector(`[data-selector="${className}"]`);
27+
const styleId = element.getAttribute(pbStyleAttribute);
28+
const existedStyleBlock = document.querySelector(`style[${styleDataAttribute}="${styleId}"]`);
2929

3030
ko.utils.objectForEach(value, (styleName, styleValue) => {
3131
styleValue = ko.utils.unwrapObservable(styleValue);
@@ -44,10 +44,9 @@ ko.bindingHandlers.style = {
4444
if (!_.isEmpty(styles)) {
4545
const styleElement: HTMLStyleElement = document.createElement("style");
4646

47-
styleElement.setAttribute("data-selector", className);
48-
styleElement.innerHTML = generateCssBlock(className, styles);
49-
element.classList.add(className);
50-
element.append(styleElement);
47+
styleElement.setAttribute(styleDataAttribute, styleId);
48+
styleElement.innerHTML = generateCssBlock(`[${pbStyleAttribute}="${styleId}"]`, styles);
49+
element.parentElement.append(styleElement);
5150
}
5251
} else {
5352
originalStyle.update(element, valueAccessor, allBindings, viewModel, bindingContext);

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/style-registry.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
*/
55

66
import _ from "underscore";
7-
import { fromCamelCaseToSnake } from "../utils/string";
7+
import { fromCamelCaseToDash } from "../utils/string";
88

99
const styleRegistries: Record<string, StyleRegistry> = {};
1010

1111
export type Styles = Record<string, Style>;
1212
export type Style = Record<string, any>;
13+
export const pbStyleAttribute: string = "data-pb-style";
14+
export const styleDataAttribute: string = "data-style-id";
1315

1416
export default class StyleRegistry {
1517
private styles: Record<string, Style> = {};
@@ -21,23 +23,23 @@ export default class StyleRegistry {
2123
}
2224

2325
/**
24-
* Update styles for className
26+
* Update styles for selector
2527
*
26-
* @param className
28+
* @param selector
2729
* @param styles
2830
*/
29-
public setStyles(className: string, styles: Style): void {
30-
this.styles[className] = styles;
31+
public setStyles(selector: string, styles: Style): void {
32+
this.styles[selector] = styles;
3133
}
3234

3335
/**
34-
* Retrieve styles for a class name
36+
* Retrieve styles for a selector
3537
*
36-
* @param className
38+
* @param selector
3739
*/
38-
public getStyles(className: string): Style {
39-
if (this.styles[className]) {
40-
return this.styles[className];
40+
public getStyles(selector: string): Style {
41+
if (this.styles[selector]) {
42+
return this.styles[selector];
4143
}
4244

4345
return {};
@@ -78,9 +80,9 @@ export function deleteStyleRegistry(id: string): void {
7880
*/
7981
export function generateCss(styles: Styles) {
8082
let generatedCss = "";
81-
Object.keys(styles).forEach((className: string) => {
82-
if (!_.isEmpty(styles[className])) {
83-
generatedCss += generateCssBlock(className, styles[className]);
83+
Object.keys(styles).forEach((selector: string) => {
84+
if (!_.isEmpty(styles[selector])) {
85+
generatedCss += generateCssBlock(selector, styles[selector]);
8486
}
8587
});
8688
return generatedCss;
@@ -89,15 +91,17 @@ export function generateCss(styles: Styles) {
8991
/**
9092
* Generate styles from an object
9193
*
92-
* @param className
94+
* @param selector
9395
* @param styles
9496
*/
95-
export function generateCssBlock(className: string, styles: Style) {
97+
export function generateCssBlock(selector: string, styles: Style) {
9698
let generatedStyles = "";
99+
97100
Object.keys(styles).forEach((key: string) => {
98101
if (!_.isEmpty(styles[key])) {
99-
generatedStyles += `${fromCamelCaseToSnake(key)}: ${styles[key]}; `;
102+
generatedStyles += `${fromCamelCaseToDash(key)}: ${styles[key]}; `;
100103
}
101104
});
102-
return `.${className} { ${generatedStyles} }`;
105+
106+
return `${selector} { ${generatedStyles} }`;
103107
}

0 commit comments

Comments
 (0)