From 12a8058284853b743fd2d289f2a05a44c1675baf Mon Sep 17 00:00:00 2001 From: Adrian Cochrane Date: Fri, 8 May 2020 20:17:03 +1200 Subject: [PATCH] Expand :is/:where lowering. --- src/Data/CSS/Style/Selector/LowerWhere.hs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Data/CSS/Style/Selector/LowerWhere.hs b/src/Data/CSS/Style/Selector/LowerWhere.hs index fc3e024..5fb0882 100644 --- a/src/Data/CSS/Style/Selector/LowerWhere.hs +++ b/src/Data/CSS/Style/Selector/LowerWhere.hs @@ -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 -- 2.30.2