This repository was archived by the owner on May 30, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcreateMediaQueries.js
More file actions
64 lines (58 loc) · 1.94 KB
/
createMediaQueries.js
File metadata and controls
64 lines (58 loc) · 1.94 KB
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
const breakpoints = require('./conf/breakpoints');
const parseUtilities = require('./parseUtilities');
const formatClassName = require('./utils/formatClassName');
const createCss = require('./createCss');
const getPotentialStyles = require('./getPotentialStyles');
const createMediaAttribute = (breakpoint) => {
let mediaAttribute = [];
for(let [feature, value] of Object.entries(breakpoint)) {
if(feature === 'type') {
mediaAttribute.push(value);
}
else {
mediaAttribute.push(`(${formatClassName(feature)}: ${value})`)
}
}
return `@media ${mediaAttribute.join(' and ')}`;
}
const getMediaClasses = (content, existingClassess = {}) => {
let potentialStyles = existingClassess;
if(Object.keys(potentialStyles).length < 1) {
for(let [size, width] of Object.entries(breakpoints)) {
potentialStyles[size] = [];
}
}
getPotentialStyles(content, breakpoints).forEach(k => {
let match = k.match(/^(?<breakpoint>[a-zA-Z\d]+)[\:]{1}(?<class>.*)$/)['groups'] || {};
if(match.breakpoint !== undefined && match.class !== undefined) {
potentialStyles[match.breakpoint] = [
...new Set([...potentialStyles[match.breakpoint] || [], ...[match.class]])
]
}
});
return potentialStyles;
}
const createMediaQueries = (mediaClasses) => {
let utilityClasses = parseUtilities(require('./conf/utilityClasses'));
let mediaQueries = {};
for(let [size, classes] of Object.entries(mediaClasses)) {
let styles = Object.fromEntries(Object.entries(utilityClasses).filter(
([k]) => [...classes].includes(formatClassName(k))
));
if(styles.length < 1) {
continue;
}
let css = createCss({
rules: Object.fromEntries(
Object.entries(styles)
.map(([key, value]) => [`${size}\\:${key}`, value])
)
});
mediaQueries[createMediaAttribute(breakpoints[size])] = css;
}
return mediaQueries;
}
module.exports = {
createMediaQueries,
getMediaClasses
}