Skip to content

Instantly share code, notes, and snippets.

@andrevdm
Last active July 17, 2020 08:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrevdm/5ed971293f8d042201a401f6d9e2c0c6 to your computer and use it in GitHub Desktop.
Save andrevdm/5ed971293f8d042201a401f6d9e2c0c6 to your computer and use it in GitHub Desktop.
Concur-Replica with static middleware and CSS
import Protolude
import qualified Concur.Core as CC
import qualified Concur.Replica as CR
import qualified Data.Map.Strict as Map
import qualified Data.Text as Txt
import qualified Network.Wai.Handler.Replica as WR
import qualified Network.Wai.Handler.Warp as Wa
import Network.Wai.Middleware.Static ((>->))
import qualified Network.Wai.Middleware.Static as MwS
import qualified Network.WebSockets.Connection as Wsc
import Replica.VDOM.Types as Rt
main :: IO ()
main = do
-- Find static files in ./static
let middleware = MwS.staticPolicy (MwS.noDots >-> MwS.addBase "static")
CR.run 8080 myIndex Wsc.defaultConnectionOptions middleware (counter 0)
where
-- Add a custom header with CSS and favicon
myIndex = CR.defaultIndex "Counter" myHeader
myHeader = [ Rt.VNode "link" (fl [ ("rel", Rt.AText "stylesheet")
, ("type", Rt.AText "text/css")
, ("href", Rt.AText "site.css")
]) Nothing []
, Rt.VNode "meta" (fl [ ("name", Rt.AText "viewport")
, ("content", Rt.AText "width=device-width")
, ("initial-scale", Rt.AText "1")
, ("maximum-scale", Rt.AText "1")
, ("minimum-scale", Rt.AText "1")
, ("user-scalable", Rt.AText "no")
, ("minimal-ui", Rt.AText "minimal-ui")
]) Nothing []
]
fl = Map.fromList
counter :: Int -> WR.Context -> CC.Widget HTML a
counter x ctx = do
click <-
CR.div
[]
[ Left <$> CR.div [ CR.onClick ] [ CR.text "-" ]
, CR.text $ show x
, Right <$> CR.div [ CR.onClick ] [ CR.text "+" ]
]
case click of
Left _ -> counter (x - 1) ctx
Right _ -> counter (x + 1) ctx
--....
build-depends: base >= 4.10.1.0 && < 5
, protolude
, text
, containers
, replica
, concur-core
, concur-replica
, wai
, wai-extra
, wai-websockets
, wai-middleware-static
, warp
, websockets
#.....
extra-deps:
- natural-transformation-0.4
- git: https://github.com/pkamenarsky/replica.git
commit: 46d2fd3b2c236d573f1d6002eb58cc95b2ba03b9
- git: https://github.com/pkamenarsky/concur.git
commit: dc5347b35c79654d58fa95716f425ee7248504fb
subdirs:
- concur-core
- git: https://github.com/pkamenarsky/concur-replica.git
commit: 7d16bcc93114c62252e3e22c208dc2a819f02435
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment