on develop help sign in
10 files changed+52−36
since splitsnapshots
unifiedsplit
reflex-dom-core/ChangeLog.md+4 reflex-dom-core/reflex-dom-core.cabal+4−2 reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+2−3 reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+1−1 reflex-dom-core/src/Reflex/Dom/Main.hs−1 reflex-dom-core/src/Reflex/Dom/Widget/Lazy.hs+1−1 reflex-dom-core/test/hlint.hs+1−1 reflex-dom-core/test/hydration.hs+33−26 reflex-dom/ChangeLog.md+4
reflex-dom-core/ChangeLog.md+4
@@ -1,5 +1,9 @@
11# Revision history for reflex-dom-core
22
3+## 0.6.2.1
4+
5+* Fix hlint complaints with newer GHC.
6+
37## 0.6.2.0
48
59* ([#400](https://github.com/reflex-frp/reflex-dom/pull/400/files)) Set value of input elements in static renderer
reflex-dom-core/reflex-dom-core.cabal+4−2
@@ -1,6 +1,6 @@
11cabal-version: 1.24
22Name: reflex-dom-core
3−Version: 0.6.2.0
3+Version: 0.6.2.1
44Synopsis: Functional Reactive Web Apps with Reflex
55Description:
66 Web applications without callbacks or side-effects.
@@ -176,7 +176,9 @@ library
176176 Reflex.Dom.Builder.Class.TH
177177
178178test-suite hlint
179− build-depends: base, hlint
179+ build-depends:
180+ base,
181+ hlint >= 2.0 && < 4.0
180182 hs-source-dirs: test
181183 main-is: hlint.hs
182184 type: exitcode-stdio-1.0
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1
@@ -9,11 +9,12 @@
99{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1010#if !MIN_VERSION_base(4,9,0)
1111{-# LANGUAGE ImpredicativeTypes #-}
12+#else
13+{-# LANGUAGE Rank2Types #-} -- Implied by ImpredicativeTypes
1214#endif
1315{-# LANGUAGE LambdaCase #-}
1416{-# LANGUAGE OverloadedStrings #-}
1517{-# LANGUAGE PolyKinds #-}
16−{-# LANGUAGE Rank2Types #-}
1718{-# LANGUAGE RecursiveDo #-}
1819{-# LANGUAGE ScopedTypeVariables #-}
1920{-# LANGUAGE StandaloneDeriving #-}
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+2−3
@@ -2,7 +2,6 @@
22{-# LANGUAGE CPP #-}
33{-# LANGUAGE ConstraintKinds #-}
44{-# LANGUAGE DataKinds #-}
5−{-# LANGUAGE DeriveFunctor #-}
65{-# LANGUAGE DeriveTraversable #-}
76{-# LANGUAGE EmptyDataDecls #-}
87{-# LANGUAGE FlexibleContexts #-}
@@ -1877,14 +1876,14 @@ hoistTraverseWithKeyWithAdjust base mapPatch updateChildUnreadiness applyDomUpda
18771876 getHydrationMode >>= \case
18781877 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
18791878 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1880− phs <- traverse id $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
1879+ phs <- sequenceA $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
18811880 liftIO $ writeIORef placeholders $! phs
18821881 insertAfterPreviousNode lastPlaceholder
18831882 HydrationMode_Immediate -> do
18841883 let activate i = do
18851884 append $ toNode $ _traverseChildImmediate_fragment i
18861885 pure $ _traverseChildImmediate_placeholder i
1887− phs <- traverse id $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1886+ phs <- sequenceA $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
18881887 liftIO $ writeIORef placeholders $! phs
18891888 append $ toNode lastPlaceholder
18901889 requestDomAction_ $ ffor children' $ \p -> do
reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+1−1
@@ -274,7 +274,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
274274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
275275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
276276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
277− modify . (:) =<< (\c -> "<!--" <> c <> "-->") <$> case mSetContents of
277+ (modify . (:)) . (\c -> "<!--" <> c <> "-->") =<< case mSetContents of
278278 Nothing -> return (pure (escape initialContents))
279279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
280280 return $ CommentNode ()
reflex-dom-core/src/Reflex/Dom/Main.hs−1
@@ -5,7 +5,6 @@
55{-# LANGUAGE GADTs #-}
66{-# LANGUAGE MultiParamTypeClasses #-}
77{-# LANGUAGE NoMonomorphismRestriction #-}
8−{-# LANGUAGE PatternSynonyms #-}
98{-# LANGUAGE RankNTypes #-}
109{-# LANGUAGE RecursiveDo #-}
1110{-# LANGUAGE ScopedTypeVariables #-}
reflex-dom-core/src/Reflex/Dom/Widget/Lazy.hs+1−1
@@ -117,7 +117,7 @@ virtualList heightPx rowPx maxIndex i0 setI keyToIndex items0 itemsUpdate itemBu
117117 "overflow" =: "hidden" <>
118118 "position" =: "relative"
119119 mkRow k = toStyleAttr $ "height" =: (T.pack (show rowPx) <> "px") <>
120− "top" =: ((<>"px") $ T.pack $ show $ keyToIndex k * rowPx) <>
120+ "top" =: (<> "px") (T.pack $ show $ keyToIndex k * rowPx) <>
121121 "position" =: "absolute" <>
122122 "width" =: "100%"
123123 findWindow sizeIncrement windowSize startingPosition =
reflex-dom-core/test/hlint.hs+1−1
@@ -1,4 +1,4 @@
1−import Language.Haskell.HLint3 (hlint)
1+import Language.Haskell.HLint (hlint)
22import System.Exit (exitFailure, exitSuccess)
33
44main :: IO ()
reflex-dom-core/test/hydration.hs+33−26
@@ -20,6 +20,14 @@
2020
2121{-# OPTIONS_GHC -fno-warn-orphans #-}
2222
23+-- Notice to those working on this test suite:
24+-- It doesn't appear to be possible to use --match to run a particular test, in
25+-- this situation the test may hang before reaching our code. This seems to
26+-- happen when the test is not the first test in the block. As a workaround, you
27+-- can just comment out the other tests. Also, using `xit` will cause the same
28+-- issue. `xit` tests must be the last tests in the session, or the session will
29+-- hang in the following test.
30+
2331import Prelude hiding (fail)
2432import Control.Concurrent
2533import qualified Control.Concurrent.Async as Async
@@ -146,13 +154,13 @@ main = do
146154 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
147155 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
148156 chromeCaps' = WD.getCaps $ chromeConfig browserPath chromeFlags
149− hspec (tests withDebugging wdConfig [chromeCaps'] selenium) `finally` _selenium_stopServer selenium
157+ hspec (tests withDebugging wdConfig [(chromeCaps', "chrome")] selenium) `finally` _selenium_stopServer selenium
150158
151−tests :: Bool -> WD.WDConfig -> [Capabilities] -> Selenium -> Spec
159+tests :: Bool -> WD.WDConfig -> [(Capabilities, String)] -> Selenium -> Spec
152160tests withDebugging wdConfig caps _selenium = do
153161 let putStrLnDebug :: MonadIO m => Text -> m ()
154162 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
155− session' = sessionWith wdConfig "" . using (map (,"") caps)
163+ session' t = sessionWith wdConfig t . using caps
156164 runWD m = runWDOptions (WdOptions False) $ do
157165 putStrLnDebug "before"
158166 r <- m
@@ -164,7 +172,7 @@ tests withDebugging wdConfig caps _selenium = do
164172 testWidget = testWidgetDebug True withDebugging
165173 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
166174 testWidget' = testWidgetDebug' True withDebugging
167− describe "text" $ session' $ do
175+ session' "text" $ do
168176 it "works" $ runWD $ do
169177 testWidgetStatic (checkBodyText "hello world") $ do
170178 text "hello world"
@@ -225,7 +233,7 @@ tests withDebugging wdConfig caps _selenium = do
225233 click <- button ""
226234 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
227235
228− describe "element" $ session' $ do
236+ session' "element" $ do
229237 it "works with domEvent Click" $ runWD $ do
230238 clickedRef <- liftIO $ newRef False
231239 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
@@ -289,8 +297,8 @@ tests withDebugging wdConfig caps _selenium = do
289297 let click = domEvent Click e
290298 return ()
291299
292− describe "inputElement" $ do
293− describe "static renderer" $ session' $ do
300+ session' "inputElement" $ do
301+ describe "static renderer" $ do
294302 it "sets value attribute" $ runWD $ do
295303 let checkStatic = do
296304 e <- findElemWithRetry $ WD.ByTag "input"
@@ -347,7 +355,7 @@ tests withDebugging wdConfig caps _selenium = do
347355 & inputElementConfig_initialChecked .~ False
348356 & inputElementConfig_setChecked .~ (True <$ pb)
349357 pure ()
350− describe "hydration" $ session' $ do
358+ describe "hydration" $ do
351359 it "doesn't wipe user input when switching over" $ runWD $ do
352360 inputRef <- newRef ("hello " :: Text)
353361 testWidget'
@@ -585,8 +593,7 @@ tests withDebugging wdConfig caps _selenium = do
585593 el "p" $ dynText $ _inputElement_value e
586594 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
587595 performEvent_ $ consRef inputRef <$> _inputElement_input e
588−
589− describe "hydration/immediate" $ session' $ do
596+ describe "hydration/immediate" $ do
590597 it "captures user input after switchover" $ runWD $ do
591598 inputRef :: IORef Text <- newRef ""
592599 let checkValue = do
@@ -666,8 +673,8 @@ tests withDebugging wdConfig caps _selenium = do
666673 names <- liftJSM $ traverse File.getName fs
667674 liftIO $ writeRef filesRef names
668675
669− describe "textAreaElement" $ do
670− describe "static renderer" $ session' $ do
676+ session' "textAreaElement" $ do
677+ describe "static renderer" $ do
671678 it "sets value attribute" $ runWD $ do
672679 let checkStatic = do
673680 e <- findElemWithRetry $ WD.ByTag "textarea"
@@ -690,7 +697,7 @@ tests withDebugging wdConfig caps _selenium = do
690697 & textAreaElementConfig_initialValue .~ "test"
691698 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
692699 pure ()
693− describe "hydration" $ session' $ do
700+ describe "hydration" $ do
694701 it "doesn't wipe user input when switching over" $ runWD $ do
695702 inputRef <- newRef ("" :: Text)
696703 testWidget'
@@ -839,7 +846,7 @@ tests withDebugging wdConfig caps _selenium = do
839846 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
840847 el "p" $ dynText $ _textAreaElement_value e
841848
842− describe "hydration/immediate" $ session' $ do
849+ describe "hydration/immediate" $ do
843850 it "captures user input after switchover" $ runWD $ do
844851 inputRef :: IORef Text <- newRef ""
845852 let checkValue = do
@@ -881,13 +888,13 @@ tests withDebugging wdConfig caps _selenium = do
881888 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
882889 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
883890
884− describe "selectElement" $ do
891+ session' "selectElement" $ do
885892 let options :: DomBuilder t m => m ()
886893 options = do
887894 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
888895 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
889896 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
890− describe "hydration" $ session' $ do
897+ describe "hydration" $ do
891898 it "sets initial value correctly" $ runWD $ do
892899 inputRef <- newRef ("" :: Text)
893900 let setup = do
@@ -961,7 +968,7 @@ tests withDebugging wdConfig caps _selenium = do
961968 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
962969 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
963970
964− describe "hydration/immediate" $ session' $ do
971+ describe "hydration/immediate" $ do
965972 it "captures user input after switchover" $ runWD $ do
966973 inputRef :: IORef Text <- newRef ""
967974 let checkValue = do
@@ -1007,7 +1014,7 @@ tests withDebugging wdConfig caps _selenium = do
10071014 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
10081015 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
10091016
1010− describe "prerender" $ session' $ do
1017+ session' "prerender" $ do
10111018 it "works in simple case" $ runWD $ do
10121019 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
10131020 prerender_ (text "One") (text "Two")
@@ -1076,7 +1083,7 @@ tests withDebugging wdConfig caps _selenium = do
10761083 prerender_ (pure ()) (liftIO $ trigger "Client")
10771084 textNode $ TextNodeConfig "Initial" $ Just e
10781085
1079− describe "namespaces" $ session' $ do
1086+ session' "namespaces" $ do
10801087 it "dyn can be nested in namespaced widget" $ runWD $ do
10811088 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
10821089 let svgRootCfg = def
@@ -1085,7 +1092,7 @@ tests withDebugging wdConfig caps _selenium = do
10851092 void $ element "svg" svgRootCfg $ do
10861093 dyn_ $ text "one" <$ pure ()
10871094
1088− describe "runWithReplace" $ session' $ do
1095+ session' "runWithReplace" $ do
10891096 it "works" $ runWD $ do
10901097 replaceChan :: Chan Text <- liftIO newChan
10911098 let setup = findElemWithRetry $ WD.ByTag "div"
@@ -1283,7 +1290,7 @@ tests withDebugging wdConfig caps _selenium = do
12831290 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
12841291 text "|after"
12851292
1286− describe "traverseDMapWithKeyWithAdjust" $ session' $ do
1293+ session' "traverseDMapWithKeyWithAdjust" $ do
12871294 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
12881295 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
12891296 elClass "span" "key" $ text $ textKey k
@@ -1386,7 +1393,7 @@ tests withDebugging wdConfig caps _selenium = do
13861393 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
13871394 liftIO $ dmap `H.shouldBe` keyMap
13881395
1389− describe "traverseIntMapWithKeyWithAdjust" $ session' $ do
1396+ session' "traverseIntMapWithKeyWithAdjust" $ do
13901397 let textKeyInt k = "key" <> T.pack (show k)
13911398 intMap = IntMap.fromList
13921399 [ (1, "one")
@@ -1493,7 +1500,7 @@ tests withDebugging wdConfig caps _selenium = do
14931500 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
14941501 liftIO $ dmap `H.shouldBe` intMap
14951502
1496− describe "traverseDMapWithKeyWithAdjustWithMove" $ session' $ do
1503+ session' "traverseDMapWithKeyWithAdjustWithMove" $ do
14971504 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
14981505 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
14991506 elClass "span" "key" $ text $ textKey2 k
@@ -1573,8 +1580,8 @@ tests withDebugging wdConfig caps _selenium = do
15731580 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
15741581 liftIO $ assertEqual "DMap" initMap dmap
15751582
1576− describe "hydrating invalid HTML" $ session' $ do
1577− it "can hydrate list in paragraph" $ runWD $ do
1583+ session' "hydrating invalid HTML" $ do
1584+ xit "can hydrate list in paragraph" $ runWD $ do
15781585 let preSwitchover = do
15791586 checkBodyText "before\ninner\nafter"
15801587 -- Two <p> tags should be present
@@ -1603,7 +1610,7 @@ tests withDebugging wdConfig caps _selenium = do
16031610 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
16041611 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
16051612 -- It seems expedient for the time being to expect this test case to be updated, should those implementation details ever change.
1606− describe "dropdown" $ session' $ do
1613+ session' "dropdown" $ do
16071614 let doTest expectedOpts (initialValue :: Text) = do
16081615 let doCheck = do
16091616 es <- findElemsWithRetry $ WD.ByTag "option"
reflex-dom/ChangeLog.md+4
@@ -1,5 +1,9 @@
11# Revision history for reflex-dom
22
3+## 0.6.1.0-r1
4+
5+* Loosen reflex-dom-core version bounds
6+
37## 0.6.1.0
48
59* Update for new dependent-map and dependent-sum (after the "some" package split)