elm/Examples/elm-yesod/Main.hs

81 lines
2.1 KiB
Haskell
Raw Normal View History

2012-05-28 14:08:40 +00:00
{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings, TypeFamilies, MultiParamTypeClasses #-}
import Language.Elm
import Language.Elm.Quasi
2012-05-28 14:08:40 +00:00
import Language.Elm.Yesod
import Yesod
import Text.Hamlet
data ElmTest = ElmTest
2012-05-30 19:49:46 +00:00
-- loading external elm code
mousePage = $(elmFile "elm_source/mouse.elm")
clockPage = $(elmFile "elm_source/clock.elm")
-- embedding elm code inside Haskell using the QuasiQuoter:
shapesPage = [elm|
square = rect 200 200 (150,150)
circle = oval 140 140 (150,150)
2012-06-25 11:54:11 +00:00
pentagon = ngon 5 60 (150,150)
main = collage 300 300
[ outlined black square
, filled green pentagon
, customOutline [8,4] blue circle
]
2012-05-28 14:08:40 +00:00
|]
-- our Yesod App
mkYesod "ElmTest" [parseRoutes|
/ RootR GET
/mouse MouseR GET
/clock ClockR GET
/shapes ShapesR GET
2012-05-28 14:08:40 +00:00
|]
-- Your App data type needs to have an instance of YesodElm (see line 75&76)
-- so that toWidget can work with QuasiQuoted elm code. All URL interpolation
-- is done automatically. (e.g. lines 28-30 in elm_source/index.elm)
2012-05-28 14:08:40 +00:00
getMouseR :: Handler RepHtml
getMouseR =
defaultLayout $ do
setTitle "Mouse position demo"
toWidget mousePage
2012-05-28 14:08:40 +00:00
getClockR :: Handler RepHtml
getClockR =
defaultLayout $ do
setTitle "A clock"
toWidget clockPage
getShapesR :: Handler RepHtml
getShapesR =
defaultLayout $ do
setTitle "Simple shapes"
toWidget shapesPage
2012-05-28 14:08:40 +00:00
getRootR :: Handler RepHtml
getRootR =
defaultLayout $ do
setTitle "Welcome!"
toWidget $(elmFile "elm_source/index.elm")
2012-05-28 14:08:40 +00:00
-- Our Yesod instance contains the default layout, which inserts the elm-min.js
-- file in the site's <head> tag. The YesodElm instance defines the location of
-- elm-min.js
2012-05-28 14:08:40 +00:00
instance Yesod ElmTest where
jsLoader _ = BottomOfHeadBlocking
defaultLayout widget = do
mmsg <- getMessage
pc <- widgetToPageContent $ do
$(whamletFile "templates/default-layout.hamlet")
hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet")
instance YesodElm ElmTest where
urlElmJs _ = Right $ "https://raw.github.com/evancz/Elm/master/elm/elm-runtime-0.7.2.js"
2012-05-28 14:08:40 +00:00
main :: IO ()
main = warpDebug 3000 ElmTest