on develop help sign in
.github/workflows/haskell.ymlnew file+47
since splitsnapshots
unifiedsplit
@@ -0,0 +1,47 @@
1+name: github-action
2+
3+on: [push, pull_request]
4+
5+jobs:
6+ build:
7+ strategy:
8+ matrix:
9+ ghc: ['8.4.4', '8.6.5', '8.8.4', '8.10.2']
10+ os: ['ubuntu-latest', 'macos-latest']
11+ exclude:
12+ # There are some linker warnings in 802 on darwin that
13+ # cause compilation to fail
14+ # See https://github.com/NixOS/nixpkgs/issues/25139
15+ - ghc: '8.0.2'
16+ os: 'macos-latest'
17+ runs-on: ${{ matrix.os }}
18+
19+ name: GHC ${{ matrix.ghc }} on ${{ matrix.os }}
20+ steps:
21+ - uses: actions/checkout@v2
22+ - uses: actions/setup-haskell@v1
23+ with:
24+ ghc-version: ${{ matrix.ghc }}
25+ - name: Cache
26+ uses: actions/cache@v1
27+ env:
28+ cache-name: cache-cabal
29+ with:
30+ path: ~/.cabal
31+ key: ${{ runner.os }}-${{ matrix.ghc }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
32+ restore-keys: |
33+ ${{ runner.os }}-${{ matrix.ghc }}-build-${{ env.cache-name }}-
34+ ${{ runner.os }}-${{ matrix.ghc }}-build-
35+ ${{ runner.os }}-${{ matrix.ghc }}-
36+ ${{ runner.os }}
37+
38+ - name: Set up cabal project file to avoid webkit2gtk
39+ run: cp cabal.project-nogtk cabal.project
40+ - name: Install dependencies
41+ run: |
42+ cabal update
43+ cabal build --only-dependencies --enable-tests --enable-benchmarks all
44+ - name: Build
45+ run: cabal build --enable-tests --enable-benchmarks all
46+ - name: Run tests
47+ run: cabal test all
cabal.project+10−1
@@ -1 +1,10 @@
1+packages:
2+ reflex-dom-core/
3+ reflex-dom/
4+ chrome-test-utils/
1−packages: chrome-test-utils, reflex-dom-core, reflex-dom, reflex-dom-test-selenium
5+ reflex-dom-test-selenium/
6+
7+source-repository-package
8+ type: git
9+ location: https://github.com/dfordivam/hspec-webdriver-clone
10+ tag: 0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8
cabal.project-nogtknew file+14
@@ -0,0 +1,14 @@
1+packages:
2+ reflex-dom-core/
3+ reflex-dom/
4+
5+package reflex-dom-core
6+ flags: -hydration-tests -gc-tests
7+
8+package reflex-dom
9+ flags: +use-warp -webkit2gtk
10+
11+source-repository-package
12+ type: git
13+ location: https://github.com/dfordivam/hspec-webdriver-clone
14+ tag: 0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8
reflex-dom-core/ChangeLog.md+8
@@ -1,5 +1,13 @@
1# Revision history for reflex-dom-core
1# Revision history for reflex-dom-core
2
2
3+## 0.6.2.1
4+
5+* Fix hlint complaints with newer GHC.
6+
7+## 0.6.2.0
8+
9+* ([#400](https://github.com/reflex-frp/reflex-dom/pull/400/files)) Set value of input elements in static renderer
10+
3## 0.6.1.0
11## 0.6.1.0
4
12
5* Bump version bounds
13* Bump version bounds
reflex-dom-core/reflex-dom-core.cabal+19−7
@@ -1,6 +1,6 @@
1cabal-version: 1.24
1cabal-version: 1.24
2Name: reflex-dom-core
2Name: reflex-dom-core
3−Version: 0.6.1.0
3+Version: 0.6.2.1
4Synopsis: Functional Reactive Web Apps with Reflex
4Synopsis: Functional Reactive Web Apps with Reflex
5Description:
5Description:
6 Web applications without callbacks or side-effects.
6 Web applications without callbacks or side-effects.
@@ -54,11 +54,21 @@ flag split-these
54 manual: False
54 manual: False
55 default: True
55 default: True
56
56
57+flag hydration-tests
58+ description: Whether to run the hydration tests (currently only available on linux)
59+ default: True
60+ manual: True
61+
62+flag gc-tests
63+ description: Whether to run the gc tests (currently only available on linux)
64+ default: True
65+ manual: True
66+
57library
67library
58 hs-source-dirs: src
68 hs-source-dirs: src
59 build-depends:
69 build-depends:
60− aeson >= 0.8 && < 1.5,
70+ aeson >= 0.8 && < 1.6,
61− base >= 4.7 && < 4.14,
71+ base >= 4.7 && < 4.15,
62 bifunctors >= 4.2 && < 6,
72 bifunctors >= 4.2 && < 6,
63 bimap >= 0.3 && < 0.5,
73 bimap >= 0.3 && < 0.5,
64 blaze-builder >= 0.4.1 && < 0.5,
74 blaze-builder >= 0.4.1 && < 0.5,
@@ -159,14 +169,16 @@ library
159 if flag(use-template-haskell)
169 if flag(use-template-haskell)
160 build-depends:
170 build-depends:
161 dependent-sum-template >= 0.1 && < 0.2,
171 dependent-sum-template >= 0.1 && < 0.2,
162− template-haskell >= 2.12.0 && < 2.16
172+ template-haskell >= 2.12.0 && < 2.17
163 other-extensions: TemplateHaskell
173 other-extensions: TemplateHaskell
164 cpp-options: -DUSE_TEMPLATE_HASKELL
174 cpp-options: -DUSE_TEMPLATE_HASKELL
165 other-modules:
175 other-modules:
166 Reflex.Dom.Builder.Class.TH
176 Reflex.Dom.Builder.Class.TH
167
177
168test-suite hlint
178test-suite hlint
169− build-depends: base, hlint
179+ build-depends:
180+ base,
181+ hlint >= 2.0 && < 4.0
170 hs-source-dirs: test
182 hs-source-dirs: test
171 main-is: hlint.hs
183 main-is: hlint.hs
172 type: exitcode-stdio-1.0
184 type: exitcode-stdio-1.0
@@ -218,7 +230,7 @@ test-suite hydration
218 main-is: hydration.hs
230 main-is: hydration.hs
219 type: exitcode-stdio-1.0
231 type: exitcode-stdio-1.0
220 default-language: Haskell98
232 default-language: Haskell98
221− if !os(linux) || !arch(x86_64) || flag(profile-reflex)
233+ if !os(linux) || !arch(x86_64) || flag(profile-reflex) || !flag(hydration-tests)
222 buildable: False
234 buildable: False
223
235
224-- broken test on base 4.11 & ghc 8.4.3
236-- broken test on base 4.11 & ghc 8.4.3
@@ -238,7 +250,7 @@ test-suite gc
238 main-is: gc.hs
250 main-is: gc.hs
239 type: exitcode-stdio-1.0
251 type: exitcode-stdio-1.0
240 default-language: Haskell98
252 default-language: Haskell98
241− if !os(linux) || !arch(x86_64)
253+ if !os(linux) || !arch(x86_64) || !flag(gc-tests)
242 buildable: False
254 buildable: False
243
255
244source-repository head
256source-repository head
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1
@@ -9,11 +9,12 @@
9{-# LANGUAGE GeneralizedNewtypeDeriving #-}
9{-# LANGUAGE GeneralizedNewtypeDeriving #-}
10#if !MIN_VERSION_base(4,9,0)
10#if !MIN_VERSION_base(4,9,0)
11{-# LANGUAGE ImpredicativeTypes #-}
11{-# LANGUAGE ImpredicativeTypes #-}
12+#else
13+{-# LANGUAGE Rank2Types #-} -- Implied by ImpredicativeTypes
12#endif
14#endif
13{-# LANGUAGE LambdaCase #-}
15{-# LANGUAGE LambdaCase #-}
14{-# LANGUAGE OverloadedStrings #-}
16{-# LANGUAGE OverloadedStrings #-}
15{-# LANGUAGE PolyKinds #-}
17{-# LANGUAGE PolyKinds #-}
16−{-# LANGUAGE Rank2Types #-}
17{-# LANGUAGE RecursiveDo #-}
18{-# LANGUAGE RecursiveDo #-}
18{-# LANGUAGE ScopedTypeVariables #-}
19{-# LANGUAGE ScopedTypeVariables #-}
19{-# LANGUAGE StandaloneDeriving #-}
20{-# LANGUAGE StandaloneDeriving #-}
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+12−4
@@ -2,7 +2,6 @@
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE CPP #-}
3{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE ConstraintKinds #-}
4{-# LANGUAGE DataKinds #-}
4{-# LANGUAGE DataKinds #-}
5−{-# LANGUAGE DeriveFunctor #-}
6{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE DeriveTraversable #-}
7{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE EmptyDataDecls #-}
8{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleContexts #-}
@@ -49,6 +48,7 @@ module Reflex.Dom.Builder.Immediate
49 , HydrationMode (..)
48 , HydrationMode (..)
50 , HydrationRunnerT (..)
49 , HydrationRunnerT (..)
51 , runHydrationRunnerT
50 , runHydrationRunnerT
51+ , runHydrationRunnerTWithFailure
52 , ImmediateDomBuilderT
52 , ImmediateDomBuilderT
53 , runHydrationDomBuilderT
53 , runHydrationDomBuilderT
54 , getHydrationMode
54 , getHydrationMode
@@ -292,15 +292,23 @@ localRunner (HydrationRunnerT m) s parent = do
292
292
293{-# INLINABLE runHydrationRunnerT #-}
293{-# INLINABLE runHydrationRunnerT #-}
294runHydrationRunnerT
294runHydrationRunnerT
295+ :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
296+ => HydrationRunnerT t m a -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
297+runHydrationRunnerT m = runHydrationRunnerTWithFailure m (pure ())
298+
299+{-# INLINABLE runHydrationRunnerTWithFailure #-}
300+runHydrationRunnerTWithFailure
295 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
301 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
296 => HydrationRunnerT t m a -> IO () -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
302 => HydrationRunnerT t m a -> IO () -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
297−runHydrationRunnerT (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
303+runHydrationRunnerTWithFailure (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
298 (a, s') <- runStateT m (HydrationState s False)
304 (a, s') <- runStateT m (HydrationState s False)
299 traverse_ removeSubsequentNodes $ _hydrationState_previousNode s'
305 traverse_ removeSubsequentNodes $ _hydrationState_previousNode s'
300 when (_hydrationState_failed s') $ liftIO $ putStrLn "reflex-dom warning: hydration failed: the DOM was not as expected at switchover time. This may be due to invalid HTML which the browser has altered upon parsing, some external JS altering the DOM, or the page being served from an outdated cache."
306 when (_hydrationState_failed s') $ liftIO $ putStrLn "reflex-dom warning: hydration failed: the DOM was not as expected at switchover time. This may be due to invalid HTML which the browser has altered upon parsing, some external JS altering the DOM, or the page being served from an outdated cache."
301 when (_hydrationState_failed s') $ liftIO onFailure
307 when (_hydrationState_failed s') $ liftIO onFailure
302 pure a
308 pure a
303
309
310+
311+
304instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (HydrationRunnerT t m) where
312instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (HydrationRunnerT t m) where
305 {-# INLINABLE newEventWithTrigger #-}
313 {-# INLINABLE newEventWithTrigger #-}
306 newEventWithTrigger = lift . newEventWithTrigger
314 newEventWithTrigger = lift . newEventWithTrigger
@@ -1868,14 +1876,14 @@ hoistTraverseWithKeyWithAdjust base mapPatch updateChildUnreadiness applyDomUpda
1868 getHydrationMode >>= \case
1876 getHydrationMode >>= \case
1869 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
1877 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
1870 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1878 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1871− 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
1872 liftIO $ writeIORef placeholders $! phs
1880 liftIO $ writeIORef placeholders $! phs
1873 insertAfterPreviousNode lastPlaceholder
1881 insertAfterPreviousNode lastPlaceholder
1874 HydrationMode_Immediate -> do
1882 HydrationMode_Immediate -> do
1875 let activate i = do
1883 let activate i = do
1876 append $ toNode $ _traverseChildImmediate_fragment i
1884 append $ toNode $ _traverseChildImmediate_fragment i
1877 pure $ _traverseChildImmediate_placeholder i
1885 pure $ _traverseChildImmediate_placeholder i
1878− phs <- traverse id $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1886+ phs <- sequenceA $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1879 liftIO $ writeIORef placeholders $! phs
1887 liftIO $ writeIORef placeholders $! phs
1880 append $ toNode lastPlaceholder
1888 append $ toNode lastPlaceholder
1881 requestDomAction_ $ ffor children' $ \p -> do
1889 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
274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
277− modify . (:) =<< (\c -> "<!--" <> c <> "-->") <$> case mSetContents of
277+ (modify . (:)) . (\c -> "<!--" <> c <> "-->") =<< case mSetContents of
278 Nothing -> return (pure (escape initialContents))
278 Nothing -> return (pure (escape initialContents))
279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
280 return $ CommentNode ()
280 return $ CommentNode ()
reflex-dom-core/src/Reflex/Dom/Main.hs+38−10
@@ -5,7 +5,6 @@
5{-# LANGUAGE GADTs #-}
5{-# LANGUAGE GADTs #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
7{-# LANGUAGE NoMonomorphismRestriction #-}
7{-# LANGUAGE NoMonomorphismRestriction #-}
8−{-# LANGUAGE PatternSynonyms #-}
9{-# LANGUAGE RankNTypes #-}
8{-# LANGUAGE RankNTypes #-}
10{-# LANGUAGE RecursiveDo #-}
9{-# LANGUAGE RecursiveDo #-}
11{-# LANGUAGE ScopedTypeVariables #-}
10{-# LANGUAGE ScopedTypeVariables #-}
@@ -64,22 +63,41 @@ mainHydrationWidgetWithHead = mainHydrationWidgetWithHead'
64{-# INLINABLE mainHydrationWidgetWithHead' #-}
63{-# INLINABLE mainHydrationWidgetWithHead' #-}
65-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
64-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
66mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
65mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
67−mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ()) (pure ())
66+mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ())
68
67
69{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
68{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
70−mainHydrationWidgetWithSwitchoverAction :: IO () -> JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
69+mainHydrationWidgetWithSwitchoverAction :: JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
71mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
70mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
72
71
73{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
72{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
74-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
73-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
75−mainHydrationWidgetWithSwitchoverAction' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
74+mainHydrationWidgetWithSwitchoverAction' :: JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
75+mainHydrationWidgetWithSwitchoverAction' = mainHydrationWidgetWithSwitchoverActionWithFailure' (pure ())
76+
77+
78+{-# INLINABLE mainHydrationWidgetWithSwitchoverActionWithFailure' #-}
79+-- | Warning: `mainHydrationWidgetWithSwitchoverActionWithFaiilure'` is provided only as performance tweak. It is expected to disappear in future releases.
80+mainHydrationWidgetWithSwitchoverActionWithFailure' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
76−mainHydrationWidgetWithSwitchoverAction' onFailure switchoverAction head' body = do
81+mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchoverAction head' body = do
77− runHydrationWidgetWithHeadAndBody onFailure switchoverAction $ \appendHead appendBody -> do
82+ runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction $ \appendHead appendBody -> do
78 appendHead head'
83 appendHead head'
79 appendBody body
84 appendBody body
80
85
81{-# INLINABLE attachHydrationWidget #-}
86{-# INLINABLE attachHydrationWidget #-}
82attachHydrationWidget
87attachHydrationWidget
88+ :: JSM ()
89+ -> JSContextSingleton ()
90+ -> ( Event DomTimeline ()
91+ -> IORef HydrationMode
92+ -> Maybe (IORef [(Node, HydrationRunnerT DomTimeline (DomCoreWidget ()) ())])
93+ -> EventChannel
94+ -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
95+ )
96+ -> IO (a, FireCommand DomTimeline DomHost)
97+attachHydrationWidget = attachHydrationWidgetWithFailure (pure ())
98+
99+{-# INLINABLE attachHydrationWidgetWithFailure #-}
100+attachHydrationWidgetWithFailure
83 :: IO ()
101 :: IO ()
84 -> JSM ()
102 -> JSM ()
85 -> JSContextSingleton ()
103 -> JSContextSingleton ()
@@ -90,7 +108,7 @@ attachHydrationWidget
90 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
108 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
91 )
109 )
92 -> IO (a, FireCommand DomTimeline DomHost)
110 -> IO (a, FireCommand DomTimeline DomHost)
93−attachHydrationWidget onFailure switchoverAction jsSing w = do
111+attachHydrationWidgetWithFailure onFailure switchoverAction jsSing w = do
94 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
112 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
95 rootNodesRef <- liftIO $ newIORef []
113 rootNodesRef <- liftIO $ newIORef []
96 events <- newChan
114 events <- newChan
@@ -106,7 +124,7 @@ attachHydrationWidget onFailure switchoverAction jsSing w = do
106 rootNodes <- liftIO $ readIORef rootNodesRef
124 rootNodes <- liftIO $ readIORef rootNodesRef
107 let delayedAction = do
125 let delayedAction = do
108 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
126 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
109− let hydrate = runHydrationRunnerT runner onFailure Nothing rootNode events
127+ let hydrate = runHydrationRunnerTWithFailure runner onFailure Nothing rootNode events
110 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
128 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
111 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
129 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
112 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
130 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
@@ -121,6 +139,16 @@ type DomCoreWidget x = PostBuildT DomTimeline (WithJSContextSingleton x (Perform
121
139
122{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
140{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
123runHydrationWidgetWithHeadAndBody
141runHydrationWidgetWithHeadAndBody
142+ :: JSM ()
143+ -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
144+ -> (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to body" --TODO: test invoking this more than once
145+ -> FloatingWidget () ()
146+ )
147+ -> JSM ()
148+runHydrationWidgetWithHeadAndBody = runHydrationWidgetWithHeadAndBodyWithFailure (pure ())
149+
150+{-# INLINABLE runHydrationWidgetWithHeadAndBodyWithFailure #-}
151+runHydrationWidgetWithHeadAndBodyWithFailure
124 :: IO ()
152 :: IO ()
125 -> JSM ()
153 -> JSM ()
126 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
154 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
@@ -128,11 +156,11 @@ runHydrationWidgetWithHeadAndBody
128 -> FloatingWidget () ()
156 -> FloatingWidget () ()
129 )
157 )
130 -> JSM ()
158 -> JSM ()
131−runHydrationWidgetWithHeadAndBody onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
159+runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
132 globalDoc <- currentDocumentUnchecked
160 globalDoc <- currentDocumentUnchecked
133 headElement <- getHeadUnchecked globalDoc
161 headElement <- getHeadUnchecked globalDoc
134 bodyElement <- getBodyUnchecked globalDoc
162 bodyElement <- getBodyUnchecked globalDoc
135− (events, fc) <- liftIO . attachHydrationWidget onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
163+ (events, fc) <- liftIO . attachHydrationWidgetWithFailure onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
136 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
164 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
137 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
165 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
138 hydrateDom n w = do
166 hydrateDom n w = do
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
117 "overflow" =: "hidden" <>
117 "overflow" =: "hidden" <>
118 "position" =: "relative"
118 "position" =: "relative"
119 mkRow k = toStyleAttr $ "height" =: (T.pack (show rowPx) <> "px") <>
119 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) <>
121 "position" =: "absolute" <>
121 "position" =: "absolute" <>
122 "width" =: "100%"
122 "width" =: "100%"
123 findWindow sizeIncrement windowSize startingPosition =
123 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)
2import System.Exit (exitFailure, exitSuccess)
2import System.Exit (exitFailure, exitSuccess)
3
3
4main :: IO ()
4main :: IO ()
reflex-dom-core/test/hydration.hs+34−27
@@ -20,6 +20,14 @@
20
20
21{-# OPTIONS_GHC -fno-warn-orphans #-}
21{-# OPTIONS_GHC -fno-warn-orphans #-}
22
22
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+
23import Prelude hiding (fail)
31import Prelude hiding (fail)
24import Control.Concurrent
32import Control.Concurrent
25import qualified Control.Concurrent.Async as Async
33import qualified Control.Concurrent.Async as Async
@@ -146,13 +154,13 @@ main = do
146 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
154 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
147 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
155 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
148 chromeCaps' = WD.getCaps $ chromeConfig browserPath chromeFlags
156 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
150
158
151−tests :: Bool -> WD.WDConfig -> [Capabilities] -> Selenium -> Spec
159+tests :: Bool -> WD.WDConfig -> [(Capabilities, String)] -> Selenium -> Spec
152tests withDebugging wdConfig caps _selenium = do
160tests withDebugging wdConfig caps _selenium = do
153 let putStrLnDebug :: MonadIO m => Text -> m ()
161 let putStrLnDebug :: MonadIO m => Text -> m ()
154 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
162 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
155− session' = sessionWith wdConfig "" . using (map (,"") caps)
163+ session' t = sessionWith wdConfig t . using caps
156 runWD m = runWDOptions (WdOptions False) $ do
164 runWD m = runWDOptions (WdOptions False) $ do
157 putStrLnDebug "before"
165 putStrLnDebug "before"
158 r <- m
166 r <- m
@@ -164,7 +172,7 @@ tests withDebugging wdConfig caps _selenium = do
164 testWidget = testWidgetDebug True withDebugging
172 testWidget = testWidgetDebug True withDebugging
165 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
173 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
166 testWidget' = testWidgetDebug' True withDebugging
174 testWidget' = testWidgetDebug' True withDebugging
167− describe "text" $ session' $ do
175+ session' "text" $ do
168 it "works" $ runWD $ do
176 it "works" $ runWD $ do
169 testWidgetStatic (checkBodyText "hello world") $ do
177 testWidgetStatic (checkBodyText "hello world") $ do
170 text "hello world"
178 text "hello world"
@@ -225,7 +233,7 @@ tests withDebugging wdConfig caps _selenium = do
225 click <- button ""
233 click <- button ""
226 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
234 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
227
235
228− describe "element" $ session' $ do
236+ session' "element" $ do
229 it "works with domEvent Click" $ runWD $ do
237 it "works with domEvent Click" $ runWD $ do
230 clickedRef <- liftIO $ newRef False
238 clickedRef <- liftIO $ newRef False
231 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
239 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
@@ -289,8 +297,8 @@ tests withDebugging wdConfig caps _selenium = do
289 let click = domEvent Click e
297 let click = domEvent Click e
290 return ()
298 return ()
291
299
292− describe "inputElement" $ do
300+ session' "inputElement" $ do
293− describe "static renderer" $ session' $ do
301+ describe "static renderer" $ do
294 it "sets value attribute" $ runWD $ do
302 it "sets value attribute" $ runWD $ do
295 let checkStatic = do
303 let checkStatic = do
296 e <- findElemWithRetry $ WD.ByTag "input"
304 e <- findElemWithRetry $ WD.ByTag "input"
@@ -347,7 +355,7 @@ tests withDebugging wdConfig caps _selenium = do
347 & inputElementConfig_initialChecked .~ False
355 & inputElementConfig_initialChecked .~ False
348 & inputElementConfig_setChecked .~ (True <$ pb)
356 & inputElementConfig_setChecked .~ (True <$ pb)
349 pure ()
357 pure ()
350− describe "hydration" $ session' $ do
358+ describe "hydration" $ do
351 it "doesn't wipe user input when switching over" $ runWD $ do
359 it "doesn't wipe user input when switching over" $ runWD $ do
352 inputRef <- newRef ("hello " :: Text)
360 inputRef <- newRef ("hello " :: Text)
353 testWidget'
361 testWidget'
@@ -585,8 +593,7 @@ tests withDebugging wdConfig caps _selenium = do
585 el "p" $ dynText $ _inputElement_value e
593 el "p" $ dynText $ _inputElement_value e
586 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
594 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
587 performEvent_ $ consRef inputRef <$> _inputElement_input e
595 performEvent_ $ consRef inputRef <$> _inputElement_input e
588−
589− describe "hydration/immediate" $ session' $ do
596+ describe "hydration/immediate" $ do
590 it "captures user input after switchover" $ runWD $ do
597 it "captures user input after switchover" $ runWD $ do
591 inputRef :: IORef Text <- newRef ""
598 inputRef :: IORef Text <- newRef ""
592 let checkValue = do
599 let checkValue = do
@@ -666,8 +673,8 @@ tests withDebugging wdConfig caps _selenium = do
666 names <- liftJSM $ traverse File.getName fs
673 names <- liftJSM $ traverse File.getName fs
667 liftIO $ writeRef filesRef names
674 liftIO $ writeRef filesRef names
668
675
669− describe "textAreaElement" $ do
676+ session' "textAreaElement" $ do
670− describe "static renderer" $ session' $ do
677+ describe "static renderer" $ do
671 it "sets value attribute" $ runWD $ do
678 it "sets value attribute" $ runWD $ do
672 let checkStatic = do
679 let checkStatic = do
673 e <- findElemWithRetry $ WD.ByTag "textarea"
680 e <- findElemWithRetry $ WD.ByTag "textarea"
@@ -690,7 +697,7 @@ tests withDebugging wdConfig caps _selenium = do
690 & textAreaElementConfig_initialValue .~ "test"
697 & textAreaElementConfig_initialValue .~ "test"
691 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
698 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
692 pure ()
699 pure ()
693− describe "hydration" $ session' $ do
700+ describe "hydration" $ do
694 it "doesn't wipe user input when switching over" $ runWD $ do
701 it "doesn't wipe user input when switching over" $ runWD $ do
695 inputRef <- newRef ("" :: Text)
702 inputRef <- newRef ("" :: Text)
696 testWidget'
703 testWidget'
@@ -839,7 +846,7 @@ tests withDebugging wdConfig caps _selenium = do
839 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
846 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
840 el "p" $ dynText $ _textAreaElement_value e
847 el "p" $ dynText $ _textAreaElement_value e
841
848
842− describe "hydration/immediate" $ session' $ do
849+ describe "hydration/immediate" $ do
843 it "captures user input after switchover" $ runWD $ do
850 it "captures user input after switchover" $ runWD $ do
844 inputRef :: IORef Text <- newRef ""
851 inputRef :: IORef Text <- newRef ""
845 let checkValue = do
852 let checkValue = do
@@ -881,13 +888,13 @@ tests withDebugging wdConfig caps _selenium = do
881 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
888 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
882 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
889 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
883
890
884− describe "selectElement" $ do
891+ session' "selectElement" $ do
885 let options :: DomBuilder t m => m ()
892 let options :: DomBuilder t m => m ()
886 options = do
893 options = do
887 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
894 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
888 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
895 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
889 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
896 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
890− describe "hydration" $ session' $ do
897+ describe "hydration" $ do
891 it "sets initial value correctly" $ runWD $ do
898 it "sets initial value correctly" $ runWD $ do
892 inputRef <- newRef ("" :: Text)
899 inputRef <- newRef ("" :: Text)
893 let setup = do
900 let setup = do
@@ -961,7 +968,7 @@ tests withDebugging wdConfig caps _selenium = do
961 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
968 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
962 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
969 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
963
970
964− describe "hydration/immediate" $ session' $ do
971+ describe "hydration/immediate" $ do
965 it "captures user input after switchover" $ runWD $ do
972 it "captures user input after switchover" $ runWD $ do
966 inputRef :: IORef Text <- newRef ""
973 inputRef :: IORef Text <- newRef ""
967 let checkValue = do
974 let checkValue = do
@@ -1007,7 +1014,7 @@ tests withDebugging wdConfig caps _selenium = do
1007 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
1014 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
1008 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
1015 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
1009
1016
1010− describe "prerender" $ session' $ do
1017+ session' "prerender" $ do
1011 it "works in simple case" $ runWD $ do
1018 it "works in simple case" $ runWD $ do
1012 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
1019 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
1013 prerender_ (text "One") (text "Two")
1020 prerender_ (text "One") (text "Two")
@@ -1076,7 +1083,7 @@ tests withDebugging wdConfig caps _selenium = do
1076 prerender_ (pure ()) (liftIO $ trigger "Client")
1083 prerender_ (pure ()) (liftIO $ trigger "Client")
1077 textNode $ TextNodeConfig "Initial" $ Just e
1084 textNode $ TextNodeConfig "Initial" $ Just e
1078
1085
1079− describe "namespaces" $ session' $ do
1086+ session' "namespaces" $ do
1080 it "dyn can be nested in namespaced widget" $ runWD $ do
1087 it "dyn can be nested in namespaced widget" $ runWD $ do
1081 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
1088 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
1082 let svgRootCfg = def
1089 let svgRootCfg = def
@@ -1085,7 +1092,7 @@ tests withDebugging wdConfig caps _selenium = do
1085 void $ element "svg" svgRootCfg $ do
1092 void $ element "svg" svgRootCfg $ do
1086 dyn_ $ text "one" <$ pure ()
1093 dyn_ $ text "one" <$ pure ()
1087
1094
1088− describe "runWithReplace" $ session' $ do
1095+ session' "runWithReplace" $ do
1089 it "works" $ runWD $ do
1096 it "works" $ runWD $ do
1090 replaceChan :: Chan Text <- liftIO newChan
1097 replaceChan :: Chan Text <- liftIO newChan
1091 let setup = findElemWithRetry $ WD.ByTag "div"
1098 let setup = findElemWithRetry $ WD.ByTag "div"
@@ -1283,7 +1290,7 @@ tests withDebugging wdConfig caps _selenium = do
1283 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
1290 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
1284 text "|after"
1291 text "|after"
1285
1292
1286− describe "traverseDMapWithKeyWithAdjust" $ session' $ do
1293+ session' "traverseDMapWithKeyWithAdjust" $ do
1287 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
1294 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
1288 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
1295 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
1289 elClass "span" "key" $ text $ textKey k
1296 elClass "span" "key" $ text $ textKey k
@@ -1386,7 +1393,7 @@ tests withDebugging wdConfig caps _selenium = do
1386 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
1393 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
1387 liftIO $ dmap `H.shouldBe` keyMap
1394 liftIO $ dmap `H.shouldBe` keyMap
1388
1395
1389− describe "traverseIntMapWithKeyWithAdjust" $ session' $ do
1396+ session' "traverseIntMapWithKeyWithAdjust" $ do
1390 let textKeyInt k = "key" <> T.pack (show k)
1397 let textKeyInt k = "key" <> T.pack (show k)
1391 intMap = IntMap.fromList
1398 intMap = IntMap.fromList
1392 [ (1, "one")
1399 [ (1, "one")
@@ -1493,7 +1500,7 @@ tests withDebugging wdConfig caps _selenium = do
1493 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
1500 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
1494 liftIO $ dmap `H.shouldBe` intMap
1501 liftIO $ dmap `H.shouldBe` intMap
1495
1502
1496− describe "traverseDMapWithKeyWithAdjustWithMove" $ session' $ do
1503+ session' "traverseDMapWithKeyWithAdjustWithMove" $ do
1497 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
1504 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
1498 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
1505 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
1499 elClass "span" "key" $ text $ textKey2 k
1506 elClass "span" "key" $ text $ textKey2 k
@@ -1573,8 +1580,8 @@ tests withDebugging wdConfig caps _selenium = do
1573 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
1580 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
1574 liftIO $ assertEqual "DMap" initMap dmap
1581 liftIO $ assertEqual "DMap" initMap dmap
1575
1582
1576− describe "hydrating invalid HTML" $ session' $ do
1583+ session' "hydrating invalid HTML" $ do
1577− it "can hydrate list in paragraph" $ runWD $ do
1584+ xit "can hydrate list in paragraph" $ runWD $ do
1578 let preSwitchover = do
1585 let preSwitchover = do
1579 checkBodyText "before\ninner\nafter"
1586 checkBodyText "before\ninner\nafter"
1580 -- Two <p> tags should be present
1587 -- Two <p> tags should be present
@@ -1603,7 +1610,7 @@ tests withDebugging wdConfig caps _selenium = do
1603 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
1610 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
1604 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
1611 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
1605 -- It seems expedient for the time being to expect this test case to be updated, should those implementation details ever change.
1612 -- 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
1607 let doTest expectedOpts (initialValue :: Text) = do
1614 let doTest expectedOpts (initialValue :: Text) = do
1608 let doCheck = do
1615 let doCheck = do
1609 es <- findElemsWithRetry $ WD.ByTag "option"
1616 es <- findElemsWithRetry $ WD.ByTag "option"
@@ -1772,7 +1779,7 @@ testWidgetDebug' hardFailure withDebugging beforeJS afterSwitchover bodyWidget =
1772 liftIO $ putMVar waitUntilSwitchover ()
1779 liftIO $ putMVar waitUntilSwitchover ()
1773 putStrLnDebug "put waitUntilSwitchover"
1780 putStrLnDebug "put waitUntilSwitchover"
1774 putStrLnDebug "running mainHydrationWidgetWithSwitchoverAction"
1781 putStrLnDebug "running mainHydrationWidgetWithSwitchoverAction"
1775− mainHydrationWidgetWithSwitchoverAction onFailure switchOverAction blank bodyWidget
1782+ mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchOverAction blank bodyWidget
1776 putStrLnDebug "syncPoint after mainHydrationWidgetWithSwitchoverAction"
1783 putStrLnDebug "syncPoint after mainHydrationWidgetWithSwitchoverAction"
1777 syncPoint
1784 syncPoint
1778 application <- liftIO $ jsaddleOr defaultConnectionOptions entryPoint $ \_ sendResponse -> do
1785 application <- liftIO $ jsaddleOr defaultConnectionOptions entryPoint $ \_ sendResponse -> do
reflex-dom-test-selenium/reflex-dom-test-selenium.cabal+1−1
@@ -15,7 +15,7 @@ library
15 hs-source-dirs: src
15 hs-source-dirs: src
16 build-depends:
16 build-depends:
17 async,
17 async,
18− base >= 4.7 && < 4.14,
18+ base >= 4.7 && < 4.15,
19 bytestring == 0.10.*,
19 bytestring == 0.10.*,
20 chrome-test-utils,
20 chrome-test-utils,
21 exceptions,
21 exceptions,
reflex-dom/ChangeLog.md+4
@@ -1,5 +1,9 @@
1# Revision history for reflex-dom
1# Revision history for reflex-dom
2
2
3+## 0.6.1.0-r1
4+
5+* Loosen reflex-dom-core version bounds
6+
3## 0.6.1.0
7## 0.6.1.0
4
8
5* Update for new dependent-map and dependent-sum (after the "some" package split)
9* Update for new dependent-map and dependent-sum (after the "some" package split)
reflex-dom/reflex-dom.cabal+3−3
@@ -61,7 +61,7 @@ library
61 hs-source-dirs: src-android
61 hs-source-dirs: src-android
62 other-modules: Reflex.Dom.Android.MainWidget
62 other-modules: Reflex.Dom.Android.MainWidget
63 build-depends:
63 build-depends:
64− aeson >= 1.4 && < 1.5,
64+ aeson >= 1.4 && < 1.6,
65 android-activity == 0.1.*,
65 android-activity == 0.1.*,
66 data-default == 0.7.*,
66 data-default == 0.7.*,
67 jsaddle >= 0.9.6 && < 0.10
67 jsaddle >= 0.9.6 && < 0.10
@@ -71,10 +71,10 @@ library
71 cpp-options: -DANDROID
71 cpp-options: -DANDROID
72 build-tools: hsc2hs
72 build-tools: hsc2hs
73 build-depends:
73 build-depends:
74− base >= 4.7 && < 4.14,
74+ base >= 4.7 && < 4.15,
75 bytestring == 0.10.*,
75 bytestring == 0.10.*,
76 reflex >= 0.8 && < 0.9,
76 reflex >= 0.8 && < 0.9,
77− reflex-dom-core == 0.6.1.0,
77+ reflex-dom-core >= 0.6.1.0 && <0.7,
78 text == 1.2.*
78 text == 1.2.*
79 if !impl(ghcjs)
79 if !impl(ghcjs)
80 if flag(use-warp) && (os(linux) || os(osx))
80 if flag(use-warp) && (os(linux) || os(osx))