packages feed

elm-init 0.1.2.1 → 1.0.0.0

raw patch · 4 files changed

+69/−17 lines, 4 filesdep ~base

Dependency ranges changed: base

Files

elm-init.cabal view
@@ -2,14 +2,14 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                elm-init-version:             0.1.2.1+version:             1.0.0.0 synopsis:            Set up basic structure for an elm project description:   Initialize a new empty elm project with some basic scaffolding according to 'https://github.com/evancz/elm-architecture-tutorial'. license:             MIT license-file:        LICENSE author:              justusadam-maintainer:          development@justusadam.com+maintainer:          dev@justus.science -- copyright: category:            Development build-type:          Simple@@ -23,6 +23,7 @@   resources/licenses/MIT   resources/licenses/GPLv3   resources/licenses/GPLv2+  resources/index.html   executable elm-init@@ -30,7 +31,7 @@   -- other-modules:   -- other-extensions:   build-depends:-      base >=4.5 && <4.9,+      base >=4.8 && <5.0,       filepath >= 1.4,       directory >= 1.2,       file-embed >= 0.0.8,@@ -47,3 +48,9 @@ source-repository head   type:     git   location: git://github.com/JustusAdam/elm-init.git++source-repository this+  type:     git+  branch:   master+  location: git://github.com/JustusAdam/elm-init.git+  tag:      1.0.0.0
resources/Main.elm view
@@ -1,4 +1,4 @@-module Main where+module %s where  -- MODEL 
+ resources/index.html view
@@ -0,0 +1,11 @@+<head>+  <title>Elm Reactor</title>+  <script src="elm.js" charset="utf-8"></script>+</head>+<body>+  <script type="text/javascript">+    window.addEventListener("DOMContentLoaded", function (){+      Elm.fullscreen(Elm.%s, { });+    })+  </script>+</body>
src/Main.hs view
@@ -5,9 +5,11 @@   import           Control.Arrow            as Arrow (first)+import           Control.Applicative      ((<$>), (<*>)) import           Data.Aeson.Encode.Pretty (encodePretty) import           Data.Bool                (bool)-import qualified Data.ByteString          as ByteString (ByteString, hPut)+import qualified Data.ByteString          as ByteString (ByteString, hPut,)+import qualified Data.ByteString.Char8    as CBS (pack, unpack) import qualified Data.ByteString.Lazy     as LBS (hPut) import           Data.FileEmbed           (embedFile) import           Data.Text                as Text (Text, append, pack, unpack)@@ -17,14 +19,16 @@                                            doesDirectoryExist, doesFileExist,                                            getCurrentDirectory, makeAbsolute) import           System.Environment       (getArgs)-import           System.FilePath          (isValid, takeBaseName, (</>))+import           System.FilePath          (isValid, takeBaseName, (</>), takeExtension) import           System.IO                (IOMode (WriteMode), withFile) import           Data.Version             (Version(..), showVersion,                                           makeVersion) import           ElmInit                  (Result, UserDecisions(..),                                           CmdArgs(..), askChoicesWithOther,                                           exists, verifyElmVersion, makePackage,-                                          flattenMaybe)+                                          flattenMaybe, askChoices)+import          Text.Printf               (printf)+import          Data.Char                 (isUpper)   standardDirectories :: [FilePath]@@ -37,8 +41,14 @@ standardFiles = [ ("README.md", Nothing) ]  standardSourceFiles :: [(FilePath, Maybe ByteString.ByteString)]-standardSourceFiles = [ ("Main.elm", Just $(embedFile "resources/Main.elm")) ]+standardSourceFiles = [] +mainFile :: String -> ByteString.ByteString+mainFile = CBS.pack . printf (CBS.unpack $(embedFile "resources/Main.elm"))++indexHtml :: String -> ByteString.ByteString+indexHtml = CBS.pack . printf (CBS.unpack $(embedFile "resources/index.html"))+ standardLicenses :: [(Text, Maybe ByteString.ByteString)] standardLicenses =   [ ("None"   , Nothing                                       )@@ -103,32 +113,50 @@   <$> askChoicesWithOther         "project name?"         0-        (Just)+        return         [pack $ takeBaseName wd]   <*> askChoicesWithOther         "choose a source folder name"         0-        ((bool Nothing <$> Just <*> isValid) . unpack)  -- filepath path verifier+        ((bool (Left "The filepath must be valid") <$> return <*> isValid) . unpack)  -- filepath path verifier         (map pack standardSourceFolders)   <*> askChoicesWithOther         "initial project version?"         0-        (verifyElmVersion . unpack)  -- TODO add verifier+        (verifyElmVersion . unpack)         [pack $ showVersion defaultProjectVersion]   <*> (putStrLn "a quick summary" >> getLine)   <*> (putStrLn "project repository url" >> getLine)   <*> askChoicesWithOther         "choose a license"         0-        Just+        return         availableLicenses   <*> askChoicesWithOther         "select the elm-version"         0-        (Just)  -- add verifier?+        return         [defaultElmVersion]+  <*> askChoicesWithOther+        "What sould be the Main file?"+        0+        (isValidMainFile . unpack)+        ["Main.elm"]+  <*> ((== "Yes") <$> askChoices+        "Should I create an index.html file?"+        0+        ["Yes", "No"]+      )  +isValidMainFile :: String -> Either Text String+isValidMainFile file+  | null file = Left "Filename cannot be 𝜖"+  | not $ isUpper (head file) = Left "Module names (and their files) have to start with uppercase"+  | ".elm" /= takeExtension file = Left "Elm modules (such as this main file) have to end with the fileending \".elm\""+  | otherwise = return file++ mkFiles :: [(FilePath, Maybe ByteString.ByteString)] -> IO [Result] mkFiles = mapM (uncurry mkFile) @@ -144,9 +172,15 @@     (return $ Left $ "file " `append` pack name `append` " already exists")  -mkSourceFiles :: FilePath -> IO [Result]-mkSourceFiles =-  mkFiles . flip map standardSourceFiles . Arrow.first . (</>)+mkSourceFiles :: FilePath -> UserDecisions -> IO [Result]+mkSourceFiles wd (Default { mainFileName = mfn, sourceFolder = sourceF, addIndex = makeIndex }) = do+  let mainModule = takeBaseName mfn+  mainFileRes <- mkFile (wd  </> sourceF </> mfn) $ Just $ mainFile mainModule+  indexFileRes <- if makeIndex+    then  mkFile (wd </> "index.html") $ Just $ indexHtml mainModule+    else return $ return ()+  others <- mkFiles $ flip map standardSourceFiles $ Arrow.first ((wd </> sourceF) </>)+  return $ mainFileRes:indexFileRes:others   mkDirs :: FilePath -> [FilePath] -> IO ()@@ -192,7 +226,7 @@   resStatic <- mkFiles $ map (Arrow.first (wd </>)) standardFiles    -- create Elm source files, collect errors-  resSource <- mkSourceFiles $ wd </> sourceFolder decisions+  resSource <- mkSourceFiles wd decisions    -- write the package config based on the user decisions   writeConf wd decisions