Last active
June 26, 2019 21:58
-
-
Save crappygraphix/8e06cfc7c16c14e0d6bedca0406dddba to your computer and use it in GitHub Desktop.
Example of do some stuff before link redirect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE CPP #-} | |
{-# LANGUAGE RankNTypes #-} | |
{-# LANGUAGE ScopedTypeVariables #-} | |
module Main where | |
import Control.Monad ( void ) | |
import Control.Monad.IO.Class ( liftIO ) | |
import Data.Map as Map | |
import Data.Text as T | |
import Language.Javascript.JSaddle | |
-- import Lens.Micro.Platform | |
import Reflex.Dom | |
main :: IO () | |
main = mainWidgetWithHead header body | |
header :: MonadWidget t m => m () | |
header = do | |
(ev, fire) <- newTriggerEvent | |
liftIO $ fire () | |
meta | |
dyEvMT <- widgetHold (return never) $ cssFile "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" <$ ev | |
_ <- widgetHold (return never) $ cssFile "https://fonts.googleapis.com/icon?family=Material+Icons" <$ switchPromptlyDyn dyEvMT | |
return () | |
body :: MonadWidget t m => m () | |
body = do | |
ev <- lynk "I'm a link" | |
ev' <- doStuff (traceEvent "I did stuff" ev) | |
performEvent_ (liftJSM goAway <$ ev') | |
lynk :: MonadWidget t m => Text -> m (Event t ()) | |
lynk t = do | |
(l, _) <- elAttr' "a" (Map.fromList [("href","javascript:void(0);")]) $ text t | |
return $ domEvent Click l | |
doStuff :: MonadWidget t m => Event t () -> m (Event t ()) | |
doStuff ev = do | |
evDec::(Event t (Maybe Text)) <- getAndDecode ("https://www.reddit.com/r/javascript.json" <$ ev) | |
return $ () <$ evDec | |
goAway :: JSM () | |
goAway = void $ eval ("window.location.assign('https://www.w3schools.com')"::Text) | |
meta :: MonadWidget t m => m () | |
meta = elAttr "meta" (Map.fromList [ | |
("name", "viewport") | |
, ("content", "width=device-width,initial-scale=1") | |
, ("charset", "UTF-8") | |
]) $ return () | |
cssFile :: MonadWidget t m => Text -> m (Event t ()) | |
cssFile r = do | |
(e, _) <- elAttr' "link" (Map.fromList [ | |
("rel", "stylesheet") | |
, ("type", "text/css") | |
, ("href", r)]) $ return () | |
return $ domEvent Load e |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment