@@ -6,15 +6,18 @@ import Control.Monad.Trans (MonadIO(liftIO))
6import Data.List (isPrefixOf, isSuffixOf)
6import Data.List (isPrefixOf, isSuffixOf)
7import Happstack.Server
7import Happstack.Server
8import Happstack.Server.Compression
8import Happstack.Server.Compression
9+import System.Directory (makeRelativeToCurrentDirectory)
9import System.Environment
10import System.Environment
10import qualified Language.Elm as Elm
11import qualified Language.Elm as Elm
12serve :: String -> IO ()
14serve :: String -> IO ()
13serve libLoc = do
15serve 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>"
15 simpleHTTP nullConf $ do
17 simpleHTTP nullConf $ do
16 _ <- compressedResponseFilter
18 _ <- compressedResponseFilter
17− msum [ uriRest (serveElm libLoc)
19+ msum [ uriRest serveElm
20+ , uriRest (serveLib libLoc)
18 , serveDirectory EnableBrowsing [] "."
21 , serveDirectory EnableBrowsing [] "."
@@ -22,20 +25,26 @@ pageTitle :: String -> String
22pageTitle fp =
25pageTitle fp =
23 reverse . takeWhile (/='/') . drop 1 . dropWhile (/='.') $ reverse fp
26 reverse . takeWhile (/='/') . drop 1 . dropWhile (/='.') $ reverse fp
25−serveElm libLoc fp = do
28+serveElm fp = do
26 let ('/':filePath) = fp
29 let ('/':filePath) = fp
27 guard (".elm" `isSuffixOf` filePath)
30 guard (".elm" `isSuffixOf` filePath)
28 content <- liftIO (readFile filePath)
31 content <- liftIO (readFile filePath)
29− ok . toResponse $ Elm.toHtml libLoc (pageTitle filePath) content
32+ ok . toResponse $ Elm.toHtml "elm-runtime.js" (pageTitle filePath) content
34+serveLib libLoc fp = do
35+ guard (fp == "/elm-runtime.js")
36+ serveFile (asContentType "application/javascript") libLoc
32main :: IO ()
38main :: IO ()
33main = getArgs >>= parse
39main = getArgs >>= parse
35parse :: [String] -> IO ()
41parse :: [String] -> IO ()
36parse ("--help":_) = putStrLn usage
42parse ("--help":_) = putStrLn usage
37−parse ("--version":_) = putStrLn "The Elm Server 0.3.5"
43+parse ("--version":_) = putStrLn "The Elm Server 0.4.0.3"
38−parse [] = serve "/elm-mini.js"
44+parse [] = do
45+ absolutePath <- getDataFileName "elm-runtime-0.4.0.3.js"
46+ runtime <- makeRelativeToCurrentDirectory absolutePath
39parse [arg]
48parse [arg]
40 | "--runtime-location=" `isPrefixOf` arg =
49 | "--runtime-location=" `isPrefixOf` arg =
41 serve . tail $ dropWhile (/='=') arg
50 serve . tail $ dropWhile (/='=') arg