mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 02:37:12 +03:00
web: production build now has all web content embedded, dev build uses ./static (#63)
This commit is contained in:
parent
c7c67efc1c
commit
4c52dd5b76
@ -1 +0,0 @@
|
||||
0.15.3
|
@ -5,7 +5,6 @@ Re-export the modules of the hledger-web program.
|
||||
module Hledger.Web (
|
||||
module Hledger.Web.App,
|
||||
module Hledger.Web.AppRun,
|
||||
module Hledger.Web.EmbeddedFiles,
|
||||
module Hledger.Web.Handlers,
|
||||
module Hledger.Web.Options,
|
||||
module Hledger.Web.Settings,
|
||||
@ -17,7 +16,6 @@ import Test.HUnit
|
||||
|
||||
import Hledger.Web.App
|
||||
import Hledger.Web.AppRun
|
||||
import Hledger.Web.EmbeddedFiles
|
||||
import Hledger.Web.Handlers
|
||||
import Hledger.Web.Options
|
||||
import Hledger.Web.Settings
|
||||
|
@ -12,12 +12,10 @@ where
|
||||
import Data.Dynamic (Dynamic, toDyn)
|
||||
import Network.Wai (Application)
|
||||
import Network.Wai.Middleware.Debug (debugHandle)
|
||||
import System.IO.Storage (withStore, putValue)
|
||||
import Yesod.Logger (makeLogger, flushLogger, Logger, logLazyText, logString)
|
||||
import Yesod.Static
|
||||
|
||||
import Hledger
|
||||
import Hledger.Cli
|
||||
import Hledger.Web.App
|
||||
import Hledger.Web.Handlers
|
||||
import Hledger.Web.Options
|
||||
@ -28,9 +26,6 @@ import Hledger.Web.Settings
|
||||
-- the comments there for more details.
|
||||
mkYesodDispatch "App" resourcesApp
|
||||
|
||||
-- withApp :: App -> (Application -> IO a) -> IO a
|
||||
-- withApp a f = toWaiApp a >>= f
|
||||
|
||||
-- This function allocates resources (such as a database connection pool),
|
||||
-- performs initialization and creates a WAI application. This is also the
|
||||
-- place to put your migrate statements to have automatic database
|
||||
@ -38,30 +33,20 @@ mkYesodDispatch "App" resourcesApp
|
||||
withApp :: AppConfig -> Logger -> (Application -> IO a) -> IO a
|
||||
withApp conf logger f = do
|
||||
#ifdef PRODUCTION
|
||||
s <- static Hledger.Web.Settings.staticDir
|
||||
putStrLn $ "Production mode, using embedded web files"
|
||||
let s = $(embed Hledger.Web.Settings.staticDir)
|
||||
#else
|
||||
putStrLn $ "Not in production mode, using web files from " ++ Hledger.Web.Settings.staticDir ++ "/"
|
||||
s <- staticDevel Hledger.Web.Settings.staticDir
|
||||
#endif
|
||||
let h = App {settings=conf
|
||||
let a = App {settings=conf
|
||||
,getLogger=logger
|
||||
,getStatic=s
|
||||
,appOpts=defwebopts
|
||||
,appArgs=[]
|
||||
,appJournal=nulljournal
|
||||
}
|
||||
toWaiApp h >>= f
|
||||
|
||||
-- withDevelApp :: Dynamic
|
||||
-- withDevelApp = do
|
||||
-- s <- static Hledger.Web.Settings.staticdir
|
||||
-- let a = App{
|
||||
-- getStatic=s
|
||||
-- ,appRoot=Hledger.Web.Settings.defapproot
|
||||
-- ,appOpts=defwebopts
|
||||
-- ,appArgs=[]
|
||||
-- ,appJournal=nulljournal
|
||||
-- }
|
||||
-- return $ toDyn (withApp a :: (Application -> IO ()) -> IO ())
|
||||
}
|
||||
toWaiApp a >>= f
|
||||
|
||||
-- for yesod devel
|
||||
withDevelAppPort :: Dynamic
|
||||
@ -78,21 +63,3 @@ withDevelAppPort =
|
||||
flushLogger logger
|
||||
where
|
||||
logHandle logger msg = logLazyText logger msg >> flushLogger logger
|
||||
|
||||
-- -- Called by wai-handler-devel.
|
||||
-- -- Eg: cabal-dev/bin/wai-handler-devel 5001 AppRun withWaiHandlerDevelApp
|
||||
-- withWaiHandlerDevelApp :: (Application -> IO ()) -> IO ()
|
||||
-- withWaiHandlerDevelApp func = do
|
||||
-- let f = "./test.journal"
|
||||
-- ej <- readJournalFile Nothing f
|
||||
-- let Right j = ej
|
||||
-- let a = App{
|
||||
-- getStatic=static Hledger.Web.Settings.staticdir
|
||||
-- ,appRoot="http://localhost:5002"
|
||||
-- ,appOpts=defwebopts{cliopts_=defcliopts{file_=Just f}}
|
||||
-- ,appArgs=[]
|
||||
-- ,appJournal=j
|
||||
-- }
|
||||
-- withStore "hledger" $ do
|
||||
-- putValue "hledger" "journal" j
|
||||
-- withApp a func
|
||||
|
@ -1,46 +0,0 @@
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-|
|
||||
|
||||
Support files (static files and templates) used by the web app are
|
||||
embedded in this module at compile time. Since hamlet can not easily use
|
||||
these directly, we provide a way to write them out to the filesystem at
|
||||
startup, when needed. This simplifies installation for end-users, and
|
||||
customisation too.
|
||||
|
||||
-}
|
||||
module Hledger.Web.EmbeddedFiles
|
||||
(
|
||||
files
|
||||
,createFilesIfMissing
|
||||
)
|
||||
where
|
||||
import Control.Monad
|
||||
import qualified Data.ByteString as B
|
||||
import Data.FileEmbed (embedDir)
|
||||
import System.Directory
|
||||
import System.FilePath
|
||||
|
||||
import Hledger.Web.Settings (datadir)
|
||||
|
||||
-- | An embedded copy of all files below the the hledger-web data
|
||||
-- directory (@.hledger\/web\/@) at compile time, as (FilePath,ByteString)
|
||||
-- pairs.
|
||||
files :: [(FilePath, B.ByteString)]
|
||||
files = $(embedDir datadir)
|
||||
|
||||
-- | If the hledger-web data directory (@.hledger\/web\/@) does not exist in
|
||||
-- the current directory, create and fill it with the web app support
|
||||
-- files (templates, stylesheets, images etc.) Returns True if the
|
||||
-- directory was missing.
|
||||
createFilesIfMissing :: IO Bool
|
||||
createFilesIfMissing = do
|
||||
exists <- doesDirectoryExist datadir
|
||||
if exists
|
||||
then return False
|
||||
else do
|
||||
createDirectoryIfMissing True datadir
|
||||
setCurrentDirectory datadir
|
||||
forM_ files $ \(f,d) -> do
|
||||
createDirectoryIfMissing True $ takeDirectory f
|
||||
B.writeFile f d
|
||||
return True
|
@ -22,7 +22,7 @@ module Hledger.Web.Settings
|
||||
, defbaseurl
|
||||
, hledgerorgurl
|
||||
, manualurl
|
||||
, datadir
|
||||
-- , datadir
|
||||
|
||||
) where
|
||||
|
||||
@ -109,7 +109,8 @@ staticDir :: FilePath
|
||||
staticDir = datadir++"static"
|
||||
|
||||
datadir :: FilePath
|
||||
datadir = "./.hledger/web/"
|
||||
datadir = "./"
|
||||
-- datadir = "./.hledger/web/"
|
||||
|
||||
-- | The base URL for your static files. As you can see by the default
|
||||
-- value, this can simply be "static" appended to your application root.
|
||||
|
@ -22,7 +22,6 @@ cabal-version: >= 1.6
|
||||
build-type: Simple
|
||||
extra-tmp-files:
|
||||
extra-source-files:
|
||||
-- included via hamletFile/EmbeddedFiles.hs since yesod needs the paths at compile-time
|
||||
-- data-dir:
|
||||
-- data-files:
|
||||
|
||||
@ -51,7 +50,6 @@ executable hledger-web
|
||||
Hledger.Web
|
||||
Hledger.Web.App
|
||||
Hledger.Web.AppRun
|
||||
Hledger.Web.EmbeddedFiles
|
||||
Hledger.Web.Options
|
||||
Hledger.Web.Settings
|
||||
Hledger.Web.StaticFiles
|
||||
@ -105,7 +103,6 @@ library
|
||||
other-modules:
|
||||
Hledger.Web
|
||||
Hledger.Web.App
|
||||
Hledger.Web.EmbeddedFiles
|
||||
Hledger.Web.Options
|
||||
Hledger.Web.Settings
|
||||
Hledger.Web.StaticFiles
|
||||
|
@ -54,17 +54,10 @@ withJournalDo' opts cmd = do
|
||||
-- | The web command.
|
||||
web :: WebOpts -> Journal -> IO ()
|
||||
web opts j = do
|
||||
created <- createFilesIfMissing
|
||||
if created
|
||||
then do
|
||||
putStrLn $ "Installing support files in "++datadir++" - done, please run again."
|
||||
exitFailure
|
||||
else do
|
||||
putStrLn $ "Running self-tests..."
|
||||
runTestsOrExit $ cliopts_ opts
|
||||
putStrLn $ "Using support files in "++datadir
|
||||
-- unless (debug_ $ cliopts_ opts) $ forkIO (browser baseurl) >> return ()
|
||||
server (base_url_ opts) (port_ opts) opts j
|
||||
putStrLn $ "Running self-tests..."
|
||||
runTestsOrExit $ cliopts_ opts
|
||||
-- unless (debug_ $ cliopts_ opts) $ forkIO (browser baseurl) >> return ()
|
||||
server (base_url_ opts) (port_ opts) opts j
|
||||
|
||||
-- browser :: String -> IO ()
|
||||
-- browser baseurl = do
|
||||
|
Before Width: | Height: | Size: 309 B After Width: | Height: | Size: 309 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in New Issue
Block a user