-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathutils.js
78 lines (70 loc) · 1.79 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
const Color = require('color');
const handlers = {
inline: boolToString,
'full-width': boolToString,
width: numberToPx,
height: numberToPx,
'border-radius': numberToPx,
'border-width': numberToPx,
'background-size': numberToPx,
padding: numberToPx,
'padding-top': numberToPx,
'padding-right': numberToPx,
'padding-bottom': numberToPx,
'padding-left': numberToPx,
'font-size': numberToPx,
'letter-spacing': numberToPx,
'line-height': numberToPx,
'icon-padding': numberToPx,
'text-padding': numberToPx,
color: handleColor,
'border-color': handleColor,
'background-color': handleColor,
'container-background-color': handleColor,
'inner-background-color': handleColor,
};
export function handleMjmlProps(props) {
return Object.keys(props).reduce((acc, curr) => {
const mjmlProp = kebabCase(curr);
return {
...acc,
[mjmlProp]: handleMjmlProp(mjmlProp, props[curr]),
};
}, {});
}
function handleMjmlProp(name, value) {
if (typeof value === 'undefined' || value === null) {
return undefined;
}
const handler = handlers[name] || ((_name, value_) => value_);
return handler(name, value);
}
function kebabCase(string) {
return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
function boolToString(name, value) {
return value ? name : undefined;
}
function numberToPx(name, value) {
if (typeof value === 'number') {
return `${value}px`;
}
return value;
}
function handleColor(name, value) {
const color = parseColor(value);
if (color) {
if (value[0] === '#' && value.length === 9) {
const alpha = color.alpha().toFixed(2);
return color.rgb().alpha(alpha).toString();
}
return value;
}
return '';
}
function parseColor(value) {
try {
return new Color(value);
} catch (e) {}
return null;
}