Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- timerWidget :: Integer -> Widget a ()
- timerWidget maxTime = do
- t0 <- liftJS getCurrentTime
- eStart <- button "Start"
- ePause <- button "Pause"
- eTick <- tickLossyFrom (realToFrac (1 :: Integer)) t0 eStart
- let dTimer' = timer' t0 120 eStart ePause eTick
- dynText =<< dTimer'
- timer' :: (PerformEvent t m, MonadWidget t m, MonadFix m, MonadHold t m, Reflex t) =>
- UTCTime -> Integer -> Event t () -> Event t () -> Event t TickInfo -> m (Dynamic t Text)
- timer' t maxTime eStart ePause eTick = do
- beStartStop <- hold never . leftmost $ [ (const 0 <$ eTick) <$ ePause, ((1+) <$ eTick) <$ eStart ]
- let eSwitch = switch beStartStop
- fmap (formatS maxTime) <$> foldDyn ($) 0 eSwitch
- formatS :: Integer -> Integer -> Text
- formatS max cur =
- case properFraction (fromInteger (max-cur) / 60) of
- (mins, s) -> let secs = round (s * 60) in
- pack $ fill mins <> ":" <> fill secs where
- fill n = if n `elem` [0..9] then "0" <> show n else show n
Advertisement
Add Comment
Please, Sign In to add comment