diff options
Diffstat (limited to 'client/src/Component')
| -rw-r--r-- | client/src/Component/Link.hs | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/client/src/Component/Link.hs b/client/src/Component/Link.hs new file mode 100644 index 0000000..7e8558b --- /dev/null +++ b/client/src/Component/Link.hs @@ -0,0 +1,33 @@ +module Component.Link +  ( link +  ) where + +import           Data.Map   (Map) +import qualified Data.Map   as M +import           Data.Text  (Text) +import qualified Data.Text  as T +import           Reflex.Dom (Dynamic, MonadWidget) +import qualified Reflex.Dom as R + +link :: forall t m a. MonadWidget t m => Text -> Dynamic t (Map Text Text) -> Text -> m () +link href inputAttrs content = +  R.elDynAttr "a" attrs (R.text content) +  where + +    onclickHandler = +      T.intercalate ";" +        [ "history.pushState(0, '', event.target.href)" +        , "dispatchEvent(new PopStateEvent('popstate', {cancelable: true, bubbles: true, view: window}))" +        , "return false" +        ] + +    attrs = +      R.ffor inputAttrs (\as -> +        (M.union +          (M.fromList +            [ ("onclick", onclickHandler) +            , ("href", href) +            ] +          ) +          as) +      )  | 
