~alcinnz/haskell-stylist

ce99669071b7ff38013cc5ed96ad6187333912b8 — Adrian Cochrane 5 years ago e5b8590
Add support for ::before/::after psuedoclasses to HTML Conduit bindings.
M stylish-html-conduit/src/Data/HTML2CSS.hs => stylish-html-conduit/src/Data/HTML2CSS.hs +23 -7
@@ 64,9 64,12 @@ strContent [] = ""
traverseStyles :: PropertyParser s => (s -> [o] -> o) -> (s -> Txt.Text -> o) ->
        QueryableStyleSheet s -> XML.Element -> o
traverseStyles = traverseStyles' Nothing temp Nothing
traverseStyles' :: PropertyParser s => Maybe Element -> s -> Maybe Element ->
        (s -> [o] -> o) -> (s -> Txt.Text -> o) ->
        QueryableStyleSheet s -> XML.Element -> o
traverseStyles' parent parentStyle previous builder textBuilder stylesheet el@(
        XML.Element _ attrs children
    ) = builder style $ traverseChildren Nothing children
    ) = builder style traverseChildren
    where
        stylishEl = elToStylish el parent previous
        maybeEl = Just stylishEl


@@ 75,13 78,19 @@ traverseStyles' parent parentStyle previous builder textBuilder stylesheet el@(
                fst $ parseProperties' $ tokenize styleAttr
            | otherwise = []

        traverseChildren prev (XML.NodeContent txt:nodes) =
            textBuilder style txt : traverseChildren prev nodes
        traverseChildren prev (XML.NodeElement el:nodes) =
        traverseChildren = traversePsuedo' "before :before" :
                traverseChildren' Nothing children ++
                [traversePsuedo' "after :after"]
        traversePsuedo' psuedos = traversePsuedo stylishEl psuedos style builder stylesheet
        traverseChildren' prev (XML.NodeContent txt:nodes) =
            textBuilder style txt : traverseChildren' prev nodes
        traverseChildren' prev (XML.NodeElement el:nodes) =
            traverseStyles' maybeEl style prev builder textBuilder stylesheet el :
                traverseChildren (Just $ elToStylish el maybeEl prev) nodes
        traverseChildren prev (_:nodes) = traverseChildren prev nodes
        traverseChildren _ [] = []
                traverseChildren' (Just $ elToStylish el maybeEl prev) nodes
        traverseChildren' prev (_:nodes) = traverseChildren' prev nodes
        traverseChildren' _ [] = []
traversePsuedo el psuedos parentStyle builder stylesheet = builder style []
    where style = cascade stylesheet (addPsuedoclasses el psuedos) [] parentStyle

elToStylish (XML.Element (XML.Name name _ _) attrs _) parent previous =
    ElementNode {


@@ 93,3 102,10 @@ elToStylish (XML.Element (XML.Name name _ _) attrs _) parent previous =
        parent = parent,
        previous = previous
    }
addPsuedoclasses el psuedoclasses
    | (Attribute "" value : attrs) <- attributes el = el {
            attributes = Attribute "" (psuedoclasses ++ value) : attrs
        }
    | otherwise = el {
            attributes = Attribute "" psuedoclasses : attributes el
        }

M stylish-html-conduit/stylish-html-conduit.cabal => stylish-html-conduit/stylish-html-conduit.cabal +1 -1
@@ 10,7 10,7 @@ name:                stylish-html-conduit
-- PVP summary:      +-+------- breaking API changes
--                   | | +----- non-breaking API additions
--                   | | | +--- code changes with no API change
version:             0.1.0.1
version:             0.1.0.2

-- A short (one-line) description of the package.
synopsis:            Bridge between html-conduit and stylish-haskell