diff --git a/cstyle/transformers/flex/main.go b/cstyle/transformers/flex/main.go
index 9f8a87f..362fdfb 100644
--- a/cstyle/transformers/flex/main.go
+++ b/cstyle/transformers/flex/main.go
@@ -15 +15 @@ func Init() cstyle.Transformer {
- return n.ComputedStyle["flex"] != ""
+ return n.GetStyle("flex") != ""
@@ -18 +18 @@ func Init() cstyle.Transformer {
- flex, err := parseFlex(n.ComputedStyle["flex"])
+ flex, err := parseFlex(n.GetStyle("flex"))
@@ -24 +24 @@ func Init() cstyle.Transformer {
- lgc.CrossMark("Input: "+lgc.String(n.ComputedStyle["flex"])),
+ lgc.CrossMark("Input: "+lgc.String(n.GetStyle("flex"))),
@@ -30,3 +30,3 @@ func Init() cstyle.Transformer {
- n.ComputedStyle["flex-basis"] = flex.FlexBasis
- n.ComputedStyle["flex-grow"] = flex.FlexGrow
- n.ComputedStyle["flex-shrink"] = flex.FlexShrink
+ n.SetStyle("flex-basis", flex.FlexBasis)
+ n.SetStyle("flex-grow", flex.FlexGrow)
+ n.SetStyle("flex-shrink", flex.FlexShrink)
package flexprep
import (
"fmt"
"grim/cstyle"
"grim/element"
"grim/lgc"
"strconv"
"strings"
)
func Init() cstyle.Transformer {
return cstyle.Transformer{
Selector: func(n *element.Node, c *cstyle.CSS) bool {
return n.ComputedStyle["flex"] != ""
},
Handler: func(n *element.Node, c *cstyle.CSS) *element.Node {
flex, err := parseFlex(n.ComputedStyle["flex"])
if err != nil {
panic(lgc.Error(
lgc.Desc(
lgc.Red("Error Parsing flex values"),
lgc.CrossMark("Input: "+lgc.String(n.ComputedStyle["flex"])),
err,
),
))
}
n.ComputedStyle["flex-basis"] = flex.FlexBasis
n.ComputedStyle["flex-grow"] = flex.FlexGrow
n.ComputedStyle["flex-shrink"] = flex.FlexShrink
return n
},
}
}
type FlexProperties struct {
FlexGrow string
FlexShrink string
FlexBasis string
}
func parseFlex(flex string) (FlexProperties, error) {
parts := strings.Fields(flex)
prop := FlexProperties{
FlexGrow: "1", // default value
FlexShrink: "1", // default value
FlexBasis: "0%", // default value
}
switch len(parts) {
case 1:
if strings.HasSuffix(parts[0], "%") || strings.HasSuffix(parts[0], "px") || strings.HasSuffix(parts[0], "em") {
prop.FlexBasis = parts[0]
} else if _, err := strconv.ParseFloat(parts[0], 64); err == nil {
prop.FlexGrow = parts[0]
prop.FlexShrink = "1"
prop.FlexBasis = "0%"
} else {
return prop, fmt.Errorf("invalid flex value: %s", parts[0])
}
case 2:
prop.FlexGrow = parts[0]
prop.FlexShrink = parts[1]
prop.FlexBasis = "0%"
case 3:
prop.FlexGrow = parts[0]
prop.FlexShrink = parts[1]
prop.FlexBasis = parts[2]
default:
return prop, fmt.Errorf("invalid number of values for flex property")
}
return prop, nil
}