@@ -6,15 +6,18 @@ import Control.Monad.Trans (MonadIO(liftIO))
66import Data.List (isPrefixOf, isSuffixOf)
77import Happstack.Server
88import Happstack.Server.Compression
9+import System.Directory (makeRelativeToCurrentDirectory)
910import System.Environment
1011import qualified Language.Elm as Elm
12+import Paths_Elm
1113
1214serve :: String -> IO ()
1315serve libLoc = do
14− putStrLn "Elm Server 0.4.0: running at <http://localhost:8000>"
16+ putStrLn "Elm Server 0.4.0.3: running at <http://localhost:8000>"
1517 simpleHTTP nullConf $ do
1618 _ <- compressedResponseFilter
17− msum [ uriRest (serveElm libLoc)
19+ msum [ uriRest serveElm
20+ , uriRest (serveLib libLoc)
1821 , serveDirectory EnableBrowsing [] "."
1922 ]
2023
@@ -22,20 +25,26 @@ pageTitle :: String -> String
2225pageTitle fp =
2326 reverse . takeWhile (/='/') . drop 1 . dropWhile (/='.') $ reverse fp
2427
25−serveElm libLoc fp = do
28+serveElm fp = do
2629 let ('/':filePath) = fp
2730 guard (".elm" `isSuffixOf` filePath)
2831 content <- liftIO (readFile filePath)
29− ok . toResponse $ Elm.toHtml libLoc (pageTitle filePath) content
32+ ok . toResponse $ Elm.toHtml "elm-runtime.js" (pageTitle filePath) content
3033
34+serveLib libLoc fp = do
35+ guard (fp == "/elm-runtime.js")
36+ serveFile (asContentType "application/javascript") libLoc
3137
3238main :: IO ()
3339main = getArgs >>= parse
3440
3541parse :: [String] -> IO ()
3642parse ("--help":_) = putStrLn usage
37−parse ("--version":_) = putStrLn "The Elm Server 0.3.5"
38−parse [] = serve "/elm-mini.js"
43+parse ("--version":_) = putStrLn "The Elm Server 0.4.0.3"
44+parse [] = do
45+ absolutePath <- getDataFileName "elm-runtime-0.4.0.3.js"
46+ runtime <- makeRelativeToCurrentDirectory absolutePath
47+ serve runtime
3948parse [arg]
4049 | "--runtime-location=" `isPrefixOf` arg =
4150 serve . tail $ dropWhile (/='=') arg