Diff
diff --git a/cstyle/plugins/flex/main.go b/cstyle/plugins/flex/main.go
index b7258ed..46801e7 100644
--- a/cstyle/plugins/flex/main.go
+++ b/cstyle/plugins/flex/main.go
@@ -22,0 +23,2 @@ func Init() cstyle.Plugin {
+ n.Width, _ = utils.ConvertToPixels("100%", n.EM, n.Parent.Width)
+
@@ -25,2 +26,0 @@ func Init() cstyle.Plugin {
- verbs := strings.Split(n.Styles["flex-direction"], "-")
- orderedNode := order(*n, n.Children, verbs[0], len(verbs) > 1, n.Styles["flex-wrap"] == "wrap")
@@ -28 +28,36 @@ func Init() cstyle.Plugin {
- var i int
+ var xOffset, yOffset float32
+ if n.Styles["justify-content"] == "" || n.Styles["justify-content"] == "flex-start" || n.Styles["justify-content"] == "flex-end" || n.Styles["justify-content"] == "center" {
+ yOffset = n.Y
+ chunkStart := 0
+ for i, v := range n.Children {
+ if xOffset+v.Width > n.Width {
+ yOffset += v.Height
+ if n.Styles["justify-content"] == "flex-end" || n.Styles["justify-content"] == "center" {
+ dif := n.Width - (xOffset)
+ if n.Styles["justify-content"] == "center" {
+ dif = dif / 2
+ }
+ for a := chunkStart; a < i; a++ {
+ n.Children[a].X += dif
+ }
+ }
+ chunkStart = i
+ xOffset = 0
+ }
+ n.Children[i].X = xOffset + n.X
+ n.Children[i].Y = yOffset
+ xOffset += v.Width
+ }
+ // Get the last row
+ if n.Styles["justify-content"] == "flex-end" || n.Styles["justify-content"] == "center" {
+ dif := n.Width - (xOffset)
+ if n.Styles["justify-content"] == "center" {
+ dif = dif / 2
+ }
+ for a := chunkStart; a < len(n.Children); a++ {
+ n.Children[a].X += dif
+ }
+ }
+ } else {
+ verbs := strings.Split(n.Styles["flex-direction"], "-")
+ orderedNode := order(*n, n.Children, verbs[0], len(verbs) > 1, n.Styles["flex-wrap"] == "wrap")
@@ -30 +65 @@ func Init() cstyle.Plugin {
- colWidth := n.Width / float32(len(orderedNode))
+ var i int
@@ -32,6 +67 @@ func Init() cstyle.Plugin {
- var xOffset, yOffset float32
- if n.Styles["justify-content"] == "space-evenly" {
- b, _ := utils.ConvertToPixels(n.Children[i].Border.Width, n.Children[i].EM, n.Width)
- cwV := utils.Max((colWidth-(n.Children[i].Width+(b*2)))/2, 0)
- xOffset = cwV
- }
+ colWidth := n.Width / float32(len(orderedNode))
@@ -39,4 +69,4 @@ func Init() cstyle.Plugin {
- for a, column := range orderedNode {
- var maxColumnHeight float32
- for _, item := range column {
- maxColumnHeight = utils.Max(item.Height, maxColumnHeight)
+ if n.Styles["justify-content"] == "space-evenly" {
+ b, _ := utils.ConvertToPixels(n.Children[i].Border.Width, n.Children[i].EM, n.Width)
+ cwV := utils.Max((colWidth-(n.Children[i].Width+(b*2)))/2, 0)
+ xOffset = cwV
@@ -45,9 +75,18 @@ func Init() cstyle.Plugin {
- yOffset = n.Children[0].Y
- for _, item := range column {
- n.Children[i] = item
- if n.Styles["justify-content"] == "space-between" {
- cwV := utils.Max((colWidth - (item.Width)), 0)
- if a == 0 {
- n.Children[i].X += xOffset
- } else if a == len(orderedNode)-1 {
- n.Children[i].X += xOffset + cwV
+ for a, column := range orderedNode {
+ var maxColumnHeight float32
+ for _, item := range column {
+ maxColumnHeight = utils.Max(item.Height, maxColumnHeight)
+ }
+
+ yOffset = n.Children[0].Y
+ for _, item := range column {
+ n.Children[i] = item
+ if n.Styles["justify-content"] == "space-between" {
+ cwV := utils.Max((colWidth - (item.Width)), 0)
+ if a == 0 {
+ n.Children[i].X += xOffset
+ } else if a == len(orderedNode)-1 {
+ n.Children[i].X += xOffset + cwV
+ } else {
+ n.Children[i].X += xOffset + cwV/2
+ }
@@ -55,15 +94,7 @@ func Init() cstyle.Plugin {
- n.Children[i].X += xOffset + cwV/2
- }
- } else if n.Styles["justify-content"] == "flex-end" || n.Styles["justify-content"] == "center" {
- dif := n.Width - (xOffset)
- if n.Styles["justify-content"] == "center" {
- dif = dif / 2
- }
- n.Children[i].X += dif
- } else if n.Styles["justify-content"] == "flex-start" || n.Styles["justify-content"] == "" {
- n.Children[i].X += xOffset
- } else {
- cwV := utils.Max((colWidth-(item.Width))/2, 0)
- var offset float32
- if n.Styles["justify-content"] == "space-evenly" {
- offset = ((cwV * 2) / float32(len(orderedNode))) * float32(a)
+ cwV := utils.Max((colWidth-(item.Width))/2, 0)
+ var offset float32
+ if n.Styles["justify-content"] == "space-evenly" {
+ offset = ((cwV * 2) / float32(len(orderedNode))) * float32(a)
+ }
+ n.Children[i].X += xOffset + (cwV - offset)
+
@@ -71 +102,3 @@ func Init() cstyle.Plugin {
- n.Children[i].X += xOffset + (cwV - offset)
+ n.Children[i].Y = yOffset
+ yOffset += maxColumnHeight
+ i++
@@ -74,4 +107 @@ func Init() cstyle.Plugin {
- n.Children[i].Y = yOffset
- yOffset += maxColumnHeight
- i++
-
+ xOffset += colWidth
@@ -79 +108,0 @@ func Init() cstyle.Plugin {
- xOffset += colWidth
@@ -82,8 +111,2 @@ func Init() cstyle.Plugin {
- content := n.Styles["align-content"]
-
- if n.Styles["flex-direction"] == "column" {
- content = n.Styles["justify-content"]
- }
-
- if content != "" && content != "flex-start" {
- var min, max, rows, col, currY float32
+ if n.Styles["align-content"] != "" && n.Styles["align-content"] != "flex-start" {
+ var min, max, rows, currY float32
@@ -99 +122 @@ func Init() cstyle.Plugin {
-
+ rows++
@@ -104,9 +127,2 @@ func Init() cstyle.Plugin {
- row := float32(int(i % int(rows)))
- if row == 0 {
- col++
- }
- if len(orderedNode[int(col)-1]) <= int(row) {
- row = 0
- }
-
- if content == "center" {
+ row := float32(i % int(rows))
+ if n.Styles["align-content"] == "center" {
@@ -114 +130 @@ func Init() cstyle.Plugin {
- } else if content == "flex-end" {
+ } else if n.Styles["align-content"] == "flex-end" {
@@ -116 +132 @@ func Init() cstyle.Plugin {
- } else if content == "space-around" {
+ } else if n.Styles["align-content"] == "space-around" {
@@ -118 +134 @@ func Init() cstyle.Plugin {
- } else if content == "space-evenly" {
+ } else if n.Styles["align-content"] == "space-evenly" {
@@ -120 +136 @@ func Init() cstyle.Plugin {
- } else if content == "space-between" {
+ } else if n.Styles["align-content"] == "space-between" {
@@ -122 +138 @@ func Init() cstyle.Plugin {
- } else if content == "stretch" {
+ } else if n.Styles["align-content"] == "stretch" {
@@ -191,5 +207 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
- if len(nodes)-1 < mod {
- nodes = append(nodes, []element.Node{v})
- } else {
- nodes[mod] = append(nodes[mod], v)
- }
+ nodes[mod] = append(nodes[mod], v)
@@ -216 +227,0 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
- var newSize float32
@@ -218,5 +229,4 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
- newSize = pMax.(float32) / float32(len(elements))
- }
- if dir == "Width" {
- for _, v := range elements {
- if newSize != 0 {
+ newSize := pMax.(float32) / float32(len(elements))
+
+ if dir == "Width" {
+ for _, v := range elements {
@@ -223,0 +234 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
+ nodes = append(nodes, []element.Node{v})
@@ -225,9 +236,6 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
- nodes = append(nodes, []element.Node{v})
- }
- if reversed {
- slices.Reverse(nodes)
- }
- } else {
- nodes = append(nodes, []element.Node{})
- for _, v := range elements {
- if newSize != 0 {
+ if reversed {
+ slices.Reverse(nodes)
+ }
+ } else {
+ nodes = append(nodes, []element.Node{})
+ for _, v := range elements {
@@ -234,0 +243,4 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
+ nodes[0] = append(nodes[0], v)
+ }
+ if reversed {
+ slices.Reverse(nodes[0])
@@ -236,4 +247,0 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
- nodes[0] = append(nodes[0], v)
- }
- if reversed {
- slices.Reverse(nodes[0])
@@ -242 +249,0 @@ func order(p element.Node, elements []element.Node, direction string, reversed,
-