~alcinnz/haskell-stylist

12a8058284853b743fd2d289f2a05a44c1675baf — Adrian Cochrane 4 years ago 48390f5
Expand :is/:where lowering.
1 files changed, 13 insertions(+), 9 deletions(-)

M src/Data/CSS/Style/Selector/LowerWhere.hs
M src/Data/CSS/Style/Selector/LowerWhere.hs => src/Data/CSS/Style/Selector/LowerWhere.hs +13 -9
@@ 6,12 6,14 @@ module Data.CSS.Style.Selector.LowerWhere(
import Data.CSS.Syntax.Selector
import Data.CSS.Style.Common

lowerSelector :: Selector -> Selector
lowerSelector (Element sel) = Element $ lowerSelector' sel
lowerSelector (Child sel x) = Child (lowerSelector sel) x
lowerSelector (Descendant sel x) = Descendant (lowerSelector sel) x
lowerSelector (Adjacent sel x) = Adjacent (lowerSelector sel) x
lowerSelector (Sibling sel x) = Sibling (lowerSelector sel) x
lowerSelector :: Selector -> [Selector]
lowerSelector (Element [Psuedoclass c args])
    | c `elem` ["is", "where"], (args', []) <- parseSelectors args = args'
lowerSelector (Element sel) = [Element $ lowerSelector' sel]
lowerSelector (Child sel x) = [Child sel' $ lowerSelector' x | sel' <- lowerSelector sel]
lowerSelector (Descendant sel x) = [Descendant sel' $ lowerSelector' x | sel' <- lowerSelector sel]
lowerSelector (Adjacent sel x) = [Adjacent sel' $ lowerSelector' x | sel' <- lowerSelector sel]
lowerSelector (Sibling sel x) = [Sibling sel' $ lowerSelector' x | sel' <- lowerSelector sel]

lowerSelector' :: [SimpleSelector] -> [SimpleSelector]
lowerSelector' (Psuedoclass c args:sel)


@@ 25,8 27,10 @@ data WhereLowerer s = WhereLowerer s
instance RuleStore s => RuleStore (WhereLowerer s) where
    new = WhereLowerer new
    addStyleRule (WhereLowerer self) priority rule =
        WhereLowerer $ addStyleRule self priority $ rule {
            inner = StyleRule (lowerSelector sel) props psuedo
        WhereLowerer $ foldl addStyleRule' self $ lowerSelector sel
      where
        addStyleRule' self' sel' = addStyleRule self' priority $ rule {
            inner = StyleRule sel' props psuedo
        }
      where StyleRule sel props psuedo = inner rule
        StyleRule sel props psuedo = inner rule
    lookupRules (WhereLowerer self) el = lookupRules self el