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 / 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 / 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
@ali-abrar
ali-abrar / index.html
Last active June 8, 2020 04:47
Setting up Leaflet.js with Reflex.Dom
<!DOCTYPE html>
<html>
<head>
<!-- Add leaflet css -->
<link
rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
crossorigin=""
/>
@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 / basic-typeahead.hs
Last active October 16, 2018 19:58
Extremely basic typeahead
{-# LANGUAGE TypeFamilies, RecursiveDo, OverloadedStrings #-}
import qualified Data.Map as Map
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Reflex.Dom
main :: IO ()
main = mainWidgetWithHead headWidget bodyWidget
@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 / bootstrap.hs
Created October 30, 2015 14:40
Reflex.Dom and Bootstrap CSS
import Reflex.Dom
import Data.Monoid
main :: IO ()
main = mainWidgetWithHead headWidget bodyWidget
headWidget = do
elAttr "link" ("href" =: "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" <> "rel" =: "stylesheet" <> "type" =: "text/css") $ return ()
bodyWidget = do