@@ -0,0 +1,58 @@
1+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings, TypeFamilies, MultiParamTypeClasses #-}
2+
3+import Data.Text (Text)
4+import Language.Elm.Yesod
5+import Yesod
6+import Yesod.Static
7+import Yesod.Default.Util
8+import Text.Hamlet
9+import Text.Julius
10+
11+data ElmTest = ElmTest
12+
13+-- our Elm code
14+mousePage = [elm|
15+niceBlue = rgb 0 (1/3) (2/3)
16+clearGreen = rgba (1/9) (8/9) (3/9) (1/2)
17+
18+scene (x,y) (w,h) =
19+ collage w h [ filled niceBlue . rotate ((x+y)/1000) $ ngon 4 100 (200,200)
20+ , filled clearGreen $ ngon 5 30 (x,y)
21+ ]
22+
23+main = lift2 scene Mouse.position Window.dimensions
24+|]
25+
26+rootPage = [elm|
27+main = plainText "Welcome!"
28+|]
29+
30+-- our Yesod App
31+
32+mkYesod "ElmTest" [parseRoutes|
33+/ RootR GET
34+/mouse MouseR GET
35+|]
36+
37+getMouseR :: Handler RepHtml
38+getMouseR = defaultLayout $ do
39+ setTitle "Mouse position demo"
40+ generateWidget mousePage
41+
42+
43+getRootR :: Handler RepHtml
44+getRootR = defaultLayout $ do
45+ setTitle "Welcome!"
46+ generateWidget rootPage
47+
48+instance Yesod ElmTest where
49+ jsLoader _ = BottomOfHeadBlocking
50+ defaultLayout widget = do
51+ mmsg <- getMessage
52+ pc <- widgetToPageContent $ do
53+ addScriptRemote $ "http://f.cl.ly/items/2e3Z3r3v29263U393c3x/elm-min.js"
54+ $(whamletFile "templates/default-layout.hamlet")
55+ hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet")
56+
57+main :: IO ()
58+main = warpDebug 3000 ElmTest