From 4c52dd5b767c4937742944d86fefa4ab8ab7c38d Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Mon, 12 Sep 2011 23:30:29 +0000 Subject: [PATCH] web: production build now has all web content embedded, dev build uses ./static (#63) --- hledger-web/.hledger/web/.version | 1 - hledger-web/Hledger/Web.hs | 2 - hledger-web/Hledger/Web/AppRun.hs | 45 +++-------------- hledger-web/Hledger/Web/EmbeddedFiles.hs | 46 ------------------ hledger-web/Hledger/Web/Settings.hs | 5 +- hledger-web/hledger-web.cabal | 3 -- hledger-web/hledger-web.hs | 15 ++---- .../web => }/static/combo_select.gif | Bin .../{.hledger/web => }/static/dhtmlxcombo.js | 0 .../{.hledger/web => }/static/dhtmlxcommon.js | 0 .../{.hledger/web => }/static/excanvas.js | 0 .../{.hledger/web => }/static/excanvas.min.js | 0 .../{.hledger/web => }/static/favicon.ico | Bin .../{.hledger/web => }/static/hledger.js | 0 .../{.hledger/web => }/static/jquery.flot.js | 0 .../web => }/static/jquery.flot.min.js | 0 .../{.hledger/web => }/static/jquery.js | 0 .../{.hledger/web => }/static/jquery.url.js | 0 .../{.hledger/web => }/static/style.css | 0 19 files changed, 13 insertions(+), 104 deletions(-) delete mode 100644 hledger-web/.hledger/web/.version delete mode 100644 hledger-web/Hledger/Web/EmbeddedFiles.hs rename hledger-web/{.hledger/web => }/static/combo_select.gif (100%) rename hledger-web/{.hledger/web => }/static/dhtmlxcombo.js (100%) rename hledger-web/{.hledger/web => }/static/dhtmlxcommon.js (100%) rename hledger-web/{.hledger/web => }/static/excanvas.js (100%) rename hledger-web/{.hledger/web => }/static/excanvas.min.js (100%) rename hledger-web/{.hledger/web => }/static/favicon.ico (100%) rename hledger-web/{.hledger/web => }/static/hledger.js (100%) rename hledger-web/{.hledger/web => }/static/jquery.flot.js (100%) rename hledger-web/{.hledger/web => }/static/jquery.flot.min.js (100%) rename hledger-web/{.hledger/web => }/static/jquery.js (100%) rename hledger-web/{.hledger/web => }/static/jquery.url.js (100%) rename hledger-web/{.hledger/web => }/static/style.css (100%) diff --git a/hledger-web/.hledger/web/.version b/hledger-web/.hledger/web/.version deleted file mode 100644 index 1985d9141..000000000 --- a/hledger-web/.hledger/web/.version +++ /dev/null @@ -1 +0,0 @@ -0.15.3 diff --git a/hledger-web/Hledger/Web.hs b/hledger-web/Hledger/Web.hs index c3235352e..c0536fbdb 100644 --- a/hledger-web/Hledger/Web.hs +++ b/hledger-web/Hledger/Web.hs @@ -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 diff --git a/hledger-web/Hledger/Web/AppRun.hs b/hledger-web/Hledger/Web/AppRun.hs index cbc27e753..96ffc9d76 100644 --- a/hledger-web/Hledger/Web/AppRun.hs +++ b/hledger-web/Hledger/Web/AppRun.hs @@ -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 diff --git a/hledger-web/Hledger/Web/EmbeddedFiles.hs b/hledger-web/Hledger/Web/EmbeddedFiles.hs deleted file mode 100644 index 814ea504a..000000000 --- a/hledger-web/Hledger/Web/EmbeddedFiles.hs +++ /dev/null @@ -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 diff --git a/hledger-web/Hledger/Web/Settings.hs b/hledger-web/Hledger/Web/Settings.hs index 2f5a26982..efe63af54 100644 --- a/hledger-web/Hledger/Web/Settings.hs +++ b/hledger-web/Hledger/Web/Settings.hs @@ -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. diff --git a/hledger-web/hledger-web.cabal b/hledger-web/hledger-web.cabal index c55b85552..b81ee31eb 100644 --- a/hledger-web/hledger-web.cabal +++ b/hledger-web/hledger-web.cabal @@ -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 diff --git a/hledger-web/hledger-web.hs b/hledger-web/hledger-web.hs index 7d976ed33..e2455b19f 100644 --- a/hledger-web/hledger-web.hs +++ b/hledger-web/hledger-web.hs @@ -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 diff --git a/hledger-web/.hledger/web/static/combo_select.gif b/hledger-web/static/combo_select.gif similarity index 100% rename from hledger-web/.hledger/web/static/combo_select.gif rename to hledger-web/static/combo_select.gif diff --git a/hledger-web/.hledger/web/static/dhtmlxcombo.js b/hledger-web/static/dhtmlxcombo.js similarity index 100% rename from hledger-web/.hledger/web/static/dhtmlxcombo.js rename to hledger-web/static/dhtmlxcombo.js diff --git a/hledger-web/.hledger/web/static/dhtmlxcommon.js b/hledger-web/static/dhtmlxcommon.js similarity index 100% rename from hledger-web/.hledger/web/static/dhtmlxcommon.js rename to hledger-web/static/dhtmlxcommon.js diff --git a/hledger-web/.hledger/web/static/excanvas.js b/hledger-web/static/excanvas.js similarity index 100% rename from hledger-web/.hledger/web/static/excanvas.js rename to hledger-web/static/excanvas.js diff --git a/hledger-web/.hledger/web/static/excanvas.min.js b/hledger-web/static/excanvas.min.js similarity index 100% rename from hledger-web/.hledger/web/static/excanvas.min.js rename to hledger-web/static/excanvas.min.js diff --git a/hledger-web/.hledger/web/static/favicon.ico b/hledger-web/static/favicon.ico similarity index 100% rename from hledger-web/.hledger/web/static/favicon.ico rename to hledger-web/static/favicon.ico diff --git a/hledger-web/.hledger/web/static/hledger.js b/hledger-web/static/hledger.js similarity index 100% rename from hledger-web/.hledger/web/static/hledger.js rename to hledger-web/static/hledger.js diff --git a/hledger-web/.hledger/web/static/jquery.flot.js b/hledger-web/static/jquery.flot.js similarity index 100% rename from hledger-web/.hledger/web/static/jquery.flot.js rename to hledger-web/static/jquery.flot.js diff --git a/hledger-web/.hledger/web/static/jquery.flot.min.js b/hledger-web/static/jquery.flot.min.js similarity index 100% rename from hledger-web/.hledger/web/static/jquery.flot.min.js rename to hledger-web/static/jquery.flot.min.js diff --git a/hledger-web/.hledger/web/static/jquery.js b/hledger-web/static/jquery.js similarity index 100% rename from hledger-web/.hledger/web/static/jquery.js rename to hledger-web/static/jquery.js diff --git a/hledger-web/.hledger/web/static/jquery.url.js b/hledger-web/static/jquery.url.js similarity index 100% rename from hledger-web/.hledger/web/static/jquery.url.js rename to hledger-web/static/jquery.url.js diff --git a/hledger-web/.hledger/web/static/style.css b/hledger-web/static/style.css similarity index 100% rename from hledger-web/.hledger/web/static/style.css rename to hledger-web/static/style.css