-- | -- Module: Main -- Copyright: (c) 2014 Ertugrul Soeylemez -- License: BSD3 -- Maintainer: Ertugrul Soeylemez module Main where import qualified Text.Blaze.Html5 as H import Clay hiding ((!)) import Control.Monad.State import Data.Text (Text) import Language.Javascript.JMacro import Network.HTTP.Types import Network.Wai import Network.Wai.Handler.Warp import System.IO import Text.Blaze.Html import Web.Page import Web.Page.GenId myWidget :: (HasIdStream a, MonadState a m, MonadWidget Text Html m) => m () myWidget = do setTitle "Test page" myId <- newId addBody $ H.h1 "My example page" <> H.p "My boring paragraph." ! domId myId addStyle $ idSel myId ? do background white color black addStyle $ idSel myId # ".groovy" ? do background darkblue color pink fontWeight bold addScriptLink "static/jquery.js" addScript [jmacro| fun init -> window.setTimeout (\() { $("#" + `myId`).addClass("groovy"); $(".groovy").text("My grooooooovy paragraph!") }) 1000; $(init) |] handler :: Application handler req k | pathInfo req == ["static", "jquery.js"] = do let ctype = (hContentType, "text/javascript; charset=UTF-8") k (responseFile ok200 [ctype] "static/jquery.js" Nothing) handler req k = do let w = execWriter (evalStateT myWidget (idsFrom ['a'..'z'])) p = realiseInline (renderWidget (titleMajor ": ") w) hdrs = [(hContentType, "text/html; charset=UTF-8")] k (responseBuilder ok200 hdrs p) main :: IO () main = run 8000 handler