1
0
Fork 0
mirror of synced 2024-09-01 02:01:32 +12:00
budibase/packages/builder/src/builderStore/generate_css.js

44 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-05-26 02:23:56 +12:00
export const generate_screen_css = component_arr => {
let styles = ""
for (const { _styles, _id, _children, _component } of component_arr) {
let [componentName] = _component.match(/[a-z]*$/)
Object.keys(_styles).forEach(selector => {
const cssString = generate_css(_styles[selector])
if (cssString) {
styles += apply_class(_id, componentName, cssString, selector)
}
})
if (_children && _children.length) {
styles += generate_screen_css(_children) + "\n"
}
}
2020-05-26 02:23:56 +12:00
return styles.trim()
}
2020-05-19 03:32:00 +12:00
export const generate_css = style => {
let cssString = Object.entries(style).reduce((str, [key, value]) => {
if (typeof value === "string") {
if (value) {
return (str += `${key}: ${value};\n`)
}
} else if (Array.isArray(value)) {
2020-05-27 01:27:33 +12:00
if (value.length > 0 && !value.every(v => v === "")) {
return (str += `${key}: ${value.join(" ")};\n`)
2020-05-27 01:27:33 +12:00
}
2020-05-19 03:32:00 +12:00
}
return str
2020-05-19 03:32:00 +12:00
}, "")
2020-05-19 03:32:00 +12:00
return (cssString || "").trim()
}
2020-05-27 01:27:33 +12:00
export const apply_class = (id, name = "element", styles, selector) => {
2020-05-26 02:23:56 +12:00
if (selector === "normal") {
return `.${name}-${id} {\n${styles}\n}`
} else {
let sel = selector === "selected" ? "::selection" : `:${selector}`
return `.${name}-${id}${sel} {\n${styles}\n}`
}
2020-05-26 02:23:56 +12:00
}