Skip to content

Instantly share code, notes, and snippets.

View ali-abrar's full-sized avatar
⛰️

Ali Abrar ali-abrar

⛰️
View GitHub Profile
@ali-abrar
ali-abrar / normalize.hs
Created December 31, 2021 04:44
NFKC string normalization
{-# Language JavaScriptFFI #-}
{-# Language OverloadedStrings #-}
import Data.Text (Text)
import qualified Data.Text as T
describeString :: Text -> String
describeString n = mconcat
[ T.unpack n
, " ("
, show n
@ali-abrar
ali-abrar / domrenderhook.hs
Created October 9, 2019 17:49
DomRenderHook: Scrolling to the bottom when adding an element
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RecursiveDo #-}
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Map as Map
import qualified Data.Text as T
import Reflex.Dom
import GHCJS.DOM.Element (setScrollTop, getScrollHeight)
main :: IO ()
@ali-abrar
ali-abrar / preventdefault.hs
Created March 8, 2019 03:25
Link with prevent default on click
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Lens ((&), (%~), (.~))
import Data.Proxy
import Reflex.Dom
main :: IO ()
main = mainWidget $ do
(click, ()) <- linkPreventDefault $ text "O.S."
@ali-abrar
ali-abrar / osmd-with-jsexception-handling.hs
Last active November 16, 2018 21:49
OpenSheetMusicDisplay with Obelisk
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Frontend where
import Data.Text (Text)
import qualified Data.Text as T
import Obelisk.Frontend
import Obelisk.Route
import Reflex.Dom.Core
@ali-abrar
ali-abrar / jsaddleWarp.hs
Created March 8, 2018 00:02
reflex-dom + jsaddle-warp
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
#ifdef ghcjs_HOST_OS
import Reflex.Dom
#else
import Language.Javascript.JSaddle.Warp (run)
import Reflex.Dom.Core
#endif
main :: IO ()
@ali-abrar
ali-abrar / bodyKeyDown.hs
Last active December 26, 2020 01:38
reflex-dom <body> key handler
{-# language PackageImports #-}
import Control.Monad
import "ghcjs-dom" GHCJS.DOM.Document (getBody)
import GHCJS.DOM.EventM (on, preventDefault)
import GHCJS.DOM.GlobalEventHandlers (keyDown)
import Reflex.Dom hiding (preventDefault)
import Web.KeyCode
main :: IO ()
main = mainWidget $ do
@ali-abrar
ali-abrar / reflex-dom-issue-208.hs
Created March 7, 2018 22:43
reflex-dom issue #208
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-}
import Control.Arrow ((&&&))
import Control.Monad.IO.Class (liftIO)
import qualified Data.Map as Map
import Data.Text (Text)
import qualified Data.Text as T
import Reflex.Dom
main :: IO ()
@ali-abrar
ali-abrar / reflex-dom-issue-208.hs
Created March 7, 2018 22:43
reflex-dom issue #208
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-}
import Control.Arrow ((&&&))
import Control.Monad.IO.Class (liftIO)
import qualified Data.Map as Map
import Data.Text (Text)
import qualified Data.Text as T
import Reflex.Dom
main :: IO ()
@ali-abrar
ali-abrar / typeahead.hs
Created June 4, 2016 20:52
June 4 2016 Reflex.Dom workshop (NY Haskell User's Group)
{-# LANGUAGE ScopedTypeVariables, RankNTypes #-}
import Reflex.Dom
import Data.Monoid ((<>))
import Data.List (isPrefixOf)
main :: IO ()
main = mainWidgetWithHead headTag bodyTag
headTag :: MonadWidget t m => m ()
headTag = elAttr "link" ("rel" =: "stylesheet" <> "href" =: "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css") $ return ()
@ali-abrar
ali-abrar / globalKeypress.hs
Created March 27, 2016 01:15
Global keypress events
import Control.Monad.IO.Class
import GHCJS.DOM (webViewGetDomDocument)
import GHCJS.DOM.Document (getBody)
import GHCJS.DOM.Element (keyDown)
import GHCJS.DOM.EventM (on, preventDefault)
import Reflex.Dom
main :: IO ()
main = mainWidget $ do