@@ -0,0 +1,42 @@
1+{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
2+
3+module Language.Elm.Yesod (elm, generateWidget) where
4+
5+import Language.Haskell.TH.Quote
6+import Language.Haskell.TH
7+import Text.Blaze (preEscapedToMarkup)
8+import Text.Hamlet
9+import Text.Julius
10+import Text.Lucius
11+import Yesod.Widget
12+
13+import Initialize
14+import CompileToJS
15+import ExtractNoscript
16+
17+elm :: QuasiQuoter
18+elm = QuasiQuoter {quoteExp = \s -> [|s|] }
19+
20+css = [lucius|
21+* { padding:0; margin:0;
22+hyphens: auto; -moz-hyphens: auto;
23+-webkit-hyphens: auto; -ms-hyphens: auto;}
24+body { font-family: Arial; }
25+a:link, a:visited, a:active { text-decoration: none}
26+a:hover {text-decoration: underline; color: #ff8f12;}
27+|]
28+
29+generateWidget :: String -> GWidget sub master ()
30+generateWidget source =
31+ let expr = initialize source
32+ js = compileToJS expr
33+ noscript = either id extract expr
34+ in do toWidgetHead css
35+ toWidgetHead [julius| #{js} |]
36+ [whamlet|
37+<div #widthChecker style="width:100%; height:1px; position:absolute; top:-1px;">
38+<span #content>
39+<script type="text/javascript">
40+ Dispatcher.initialize()
41+<noscript>^{preEscapedToMarkup noscript}
42+|]