@@ -361,6 +361,13 @@ type NodeName
361 | Embedded String String
361 | Embedded String String
364+type NearbyChildren msg
366+ | ChildrenBehind (List (Html.Html msg))
367+ | ChildrenInFront (List (Html.Html msg))
368+ | ChildrenBehindAndInFront (List (Html.Html msg)) (List (Html.Html msg))
@@ -369,7 +376,7 @@ type alias Gathered msg =
369 { node : NodeName
376 { node : NodeName
370 , attributes : List (VirtualDom.Attribute msg)
377 , attributes : List (VirtualDom.Attribute msg)
371 , styles : List Style
378 , styles : List Style
372− , children : List (VirtualDom.Node msg)
379+ , children : NearbyChildren msg
373 , has : Flag.Field
380 , has : Flag.Field
@@ -872,7 +879,16 @@ skippable flag style =
875−gatherAttrRecursive : String -> NodeName -> Flag.Field -> Transformation -> List Style -> List (VirtualDom.Attribute msg) -> List (VirtualDom.Node msg) -> List (Attribute aligned msg) -> Gathered msg
882+gatherAttrRecursive :
888+ -> List (VirtualDom.Attribute msg)
889+ -> NearbyChildren msg
890+ -> List (Attribute aligned msg)
876gatherAttrRecursive classes node has transform styles attrs children elementAttrs =
892gatherAttrRecursive classes node has transform styles attrs children elementAttrs =
877 case elementAttrs of
893 case elementAttrs of
@@ -1164,75 +1180,16 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1165 Styled styled ->
1181 Styled styled ->
1166 styles ++ styled.styles
1182 styles ++ styled.styles
1170− [ Html.Attributes.class <|
1174− [ Internal.Style.classes.nearby
1175− , Internal.Style.classes.single
1176− , Internal.Style.classes.above
1181− [ Internal.Style.classes.nearby
1182− , Internal.Style.classes.single
1183− , Internal.Style.classes.below
1188− [ Internal.Style.classes.nearby
1189− , Internal.Style.classes.single
1190− , Internal.Style.classes.onRight
1195− [ Internal.Style.classes.nearby
1196− , Internal.Style.classes.single
1197− , Internal.Style.classes.onLeft
1202− [ Internal.Style.classes.nearby
1203− , Internal.Style.classes.single
1204− , Internal.Style.classes.inFront
1209− [ Internal.Style.classes.nearby
1210− , Internal.Style.classes.single
1211− , Internal.Style.classes.behind
1225− styled.html NoStyleSheet asEl
1229− if location == Behind then
1230− Internal.Style.classes.hasBehind ++ " " ++ classes
1235− gatherAttrRecursive newClasses node has transform newStyles attrs (nearbyElement :: children) remaining
1184+ gatherAttrRecursive
1191+ (addNearbyElement location elem children)
1237 AlignX x ->
1194 AlignX x ->
1238 if Flag.present Flag.xAlign has then
1195 if Flag.present Flag.xAlign has then
@@ -1288,6 +1245,106 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1288 remaining
1245 remaining
1248+addNearbyElement location elem existing =
1251+ nearbyElement location elem
1254+ NoNearbyChildren ->
1257+ ChildrenBehind [ nearby ]
1260+ ChildrenInFront [ nearby ]
1262+ ChildrenBehind existingBehind ->
1265+ ChildrenBehind (nearby :: existingBehind)
1268+ ChildrenBehindAndInFront existingBehind [ nearby ]
1270+ ChildrenInFront existingInFront ->
1273+ ChildrenBehindAndInFront [ nearby ] existingInFront
1276+ ChildrenInFront (nearby :: existingInFront)
1278+ ChildrenBehindAndInFront existingBehind existingInFront ->
1281+ ChildrenBehindAndInFront (nearby :: existingBehind) existingInFront
1284+ ChildrenBehindAndInFront existingBehind (nearby :: existingInFront)
1287+nearbyElement location elem =
1289+ [ Html.Attributes.class <|
1293+ [ Internal.Style.classes.nearby
1294+ , Internal.Style.classes.single
1295+ , Internal.Style.classes.above
1300+ [ Internal.Style.classes.nearby
1301+ , Internal.Style.classes.single
1302+ , Internal.Style.classes.below
1307+ [ Internal.Style.classes.nearby
1308+ , Internal.Style.classes.single
1309+ , Internal.Style.classes.onRight
1314+ [ Internal.Style.classes.nearby
1315+ , Internal.Style.classes.single
1316+ , Internal.Style.classes.onLeft
1321+ [ Internal.Style.classes.nearby
1322+ , Internal.Style.classes.single
1323+ , Internal.Style.classes.inFront
1328+ [ Internal.Style.classes.nearby
1329+ , Internal.Style.classes.single
1330+ , Internal.Style.classes.behind
1344+ styled.html NoStyleSheet asEl
1291renderWidth w =
1348renderWidth w =
1292 case w of
1349 case w of
1293 Px px ->
1350 Px px ->
@@ -1494,7 +1551,7 @@ element : LayoutContext -> NodeName -> List (Attribute aligned msg) -> Children
1494element context node attributes children =
1551element context node attributes children =
1495 attributes
1552 attributes
1496 |> List.reverse
1553 |> List.reverse
1497− |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] []
1554+ |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] NoNearbyChildren
1498 |> createElement context children
1555 |> createElement context children
@@ -1657,13 +1714,8 @@ createElement context children rendered =
1657 (finalizeNode rendered.has
1714 (finalizeNode rendered.has
1658 rendered.node
1715 rendered.node
1659 rendered.attributes
1716 rendered.attributes
1660− (Keyed <|
1717+ (Keyed
1664− ( "nearby-elements-pls", x )
1666− rendered.children
1718+ (addKeyedChildren "nearby-element-pls" keyed rendered.children)
1668 NoStyleSheet
1720 NoStyleSheet
@@ -1677,13 +1729,7 @@ createElement context children rendered =
1677 rendered.node
1729 rendered.node
1678 rendered.attributes
1730 rendered.attributes
1683− ( "nearby-elements-pls", x )
1685− rendered.children
1732+ (addKeyedChildren "nearby-element-pls" keyed rendered.children)
@@ -1705,7 +1751,7 @@ createElement context children rendered =
1705 rendered.has
1751 rendered.has
1706 rendered.node
1752 rendered.node
1707 rendered.attributes
1753 rendered.attributes
1708− (Unkeyed <| unkeyed ++ rendered.children)
1754+ (Unkeyed (addChildren unkeyed rendered.children))
1709 NoStyleSheet
1755 NoStyleSheet
@@ -1717,10 +1763,42 @@ createElement context children rendered =
1717 rendered.has
1763 rendered.has
1718 rendered.node
1764 rendered.node
1719 rendered.attributes
1765 rendered.attributes
1720− (Unkeyed (unkeyed ++ rendered.children))
1766+ (Unkeyed (addChildren unkeyed rendered.children))
1770+addChildren existing nearbyChildren =
1771+ case nearbyChildren of
1772+ NoNearbyChildren ->
1775+ ChildrenBehind behind ->
1778+ ChildrenInFront inFront ->
1779+ existing ++ inFront
1781+ ChildrenBehindAndInFront behind inFront ->
1782+ behind ++ existing ++ inFront
1785+addKeyedChildren key existing nearbyChildren =
1786+ case nearbyChildren of
1787+ NoNearbyChildren ->
1790+ ChildrenBehind behind ->
1791+ List.map (\x -> ( key, x )) behind ++ existing
1793+ ChildrenInFront inFront ->
1794+ existing ++ List.map (\x -> ( key, x )) inFront
1796+ ChildrenBehindAndInFront behind inFront ->
1797+ List.map (\x -> ( key, x )) behind
1799+ ++ List.map (\x -> ( key, x )) inFront