-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtwig-filters.js
59 lines (46 loc) · 981 Bytes
/
twig-filters.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
const buildSrcSet = sizes => {
if (!sizes) return;
const prefix = 'https://via.placeholder.com/';
const last = sizes[sizes.length - 1];
const src = prefix + last;
let width;
const srcset = sizes.map(size => {
width = size.split('x')[0];
return `${prefix}${size} ${width}w`;
});
return {
src,
srcset,
width
};
};
const getResponsiveImageStyles = img => {
const { src, srcset, width } = buildSrcSet(img.srcset);
const sizes = img.sizes
? img.sizes
: `(max-width: ${width}px) 100vw, ${width}px)`;
const attrs = {
src
};
if (srcset.length > 1) {
attrs.srcset = srcset.join(',');
attrs.sizes = sizes;
}
return attrs;
};
module.exports = [
{
name: 'getResponsiveImage',
func: getResponsiveImageStyles
},
{
name: 'exists',
func: (value, args) => {
if (!value) {
console.log(args);
throw new Error('value is falsy');
}
return value;
}
}
];