@@ -3,7 +3,7 @@ module Main where
33
44import Control.Monad (msum,guard)
55import Control.Monad.Trans (MonadIO(liftIO))
6−import Data.List (isPrefixOf, isSuffixOf)
6+import Data.List (isPrefixOf, isSuffixOf, (\\))
77import Data.Version (showVersion)
88import Happstack.Server
99import Happstack.Server.Compression
@@ -14,17 +14,18 @@ import Paths_elm_server
1414
1515runtime = "/elm-" ++ showVersion version ++ ".js"
1616
17−serve :: String -> IO ()
18−serve libLoc = do
17+serve :: Int -> String -> IO ()
18+serve portNumber libLoc = do
1919 putStrLn ("Elm Server " ++ showVersion version ++
20− ": running at <http://localhost:8000>")
20+ ": running at <http://localhost:" ++ (show portNumber) ++ ">")
2121 putStrLn "Just refresh a page to recompile it!"
22− simpleHTTP nullConf $ do
22+ simpleHTTP httpConf $ do
2323 _ <- compressedResponseFilter
2424 msum [ uriRest serveElm
2525 , uriRest (serveLib libLoc)
2626 , serveDirectory EnableBrowsing [] "."
2727 ]
28+ where httpConf = nullConf { port = portNumber }
2829
2930pageTitle :: String -> String
3031pageTitle = dropExtension . takeBaseName
@@ -44,12 +45,16 @@ main = getArgs >>= parse
4445parse :: [String] -> IO ()
4546parse ("--help":_) = putStrLn usage
4647parse ("--version":_) = putStrLn ("The Elm Server " ++ showVersion version)
47−parse [] = serve =<< Elm.runtime
48−parse [arg]
49− | "--runtime-location=" `isPrefixOf` arg =
50− serve . tail $ dropWhile (/='=') arg
51− | otherwise = putStrLn usageMini
52−parse _ = putStrLn usageMini
48+parse args = if null remainingArgs
49+ then serve portNumber =<< elmRuntime
50+ else putStrLn usageMini
51+ where runtimeArg = filter (isPrefixOf "--runtime-location=") args
52+ portArg = filter (isPrefixOf "--port=") args
53+ remainingArgs = (args \\ runtimeArg) \\ portArg
54+
55+ argValue arg = tail $ dropWhile (/= '=') (head arg)
56+ portNumber = if null portArg then 8000 else read (argValue portArg) :: Int
57+ elmRuntime = if null runtimeArg then Elm.runtime else return $ argValue runtimeArg
5358
5459usageMini :: String
5560usageMini =
@@ -62,6 +67,9 @@ usage =
6267 \Compiles and serves .elm files from the current directory.\n\
6368 \Example: elm-server\n\
6469 \\n\
70+ \Server configuration:\n\
71+ \ --port set the port to listen on (default: 8000)\n\
72+ \\n\
6573 \Resource Locations:\n\
6674 \ --runtime-location set the location of the Elm runtime\n\
6775 \\n\