muon 0.1.0.2 → 0.1.0.3
raw patch · 9 files changed
+51/−27 lines, 9 filesdep +ConfigFiledep +MissingH
Dependencies added: ConfigFile, MissingH
Files
- muon.cabal +3/−2
- src/Archive.hs +4/−3
- src/Home.hs +5/−4
- src/Main.hs +3/−3
- src/Page.hs +5/−4
- src/Post.hs +10/−8
- src/Site.hs +16/−1
- src/def/config.ini +5/−0
- src/def/style/style.css +0/−2
muon.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: muon-version: 0.1.0.2+version: 0.1.0.3 synopsis: Static blog generator description: Program which takes blog posts and pages written in Markdown and@@ -27,6 +27,7 @@ def/posts/*.post def/pages/about def/pages/contact+ def/config.ini extra-source-files: src/*.hs README source-repository head@@ -35,5 +36,5 @@ executable muon main-is: Main.hs- build-depends: base ==4.6.*, text ==0.11.*, HStringTemplate ==0.7.*, directory ==1.2.*, Glob ==0.7.*, process ==1.2.*, blaze-html ==0.7.*, markdown ==0.1.*+ build-depends: base ==4.6.*, text ==0.11.*, HStringTemplate ==0.7.*, directory ==1.2.*, Glob ==0.7.*, process ==1.2.*, blaze-html ==0.7.*, markdown ==0.1.*, ConfigFile==1.1.*, MissingH==1.2.* hs-source-dirs: src
src/Archive.hs view
@@ -28,14 +28,15 @@ ++ unlines (map makeTableRow ps) ++ "</table>" -renderGenericArchive t c = render- $ setAttribute "site" defaultSite+renderGenericArchive s t c = render+ $ setAttribute "site" s $ setAttribute "content" c t renderArchive = do ps <- getAllPosts t <- archiveTemplate- return $ renderGenericArchive t (makeTable $ reverse ps)+ s <- readSite+ return $ renderGenericArchive s t (makeTable $ reverse ps) writeArchive :: T.Text -> IO () writeArchive s = do
src/Home.hs view
@@ -15,16 +15,17 @@ let Just t = getStringTemplate "generic" templates return t -renderGenericHome :: StringTemplate T.Text -> [T.Text] -> T.Text-renderGenericHome t cs = render- $ setAttribute "site" defaultSite+renderGenericHome :: Site -> StringTemplate T.Text -> [T.Text] -> T.Text+renderGenericHome s t cs = render+ $ setAttribute "site" s $ setAttribute "content" (T.unlines cs) t renderHome :: IO T.Text renderHome = do cs <- getAllExtracts t <- homeTemplate- return $ renderGenericHome t $ reverse cs+ s <- readSite+ return $ renderGenericHome s t $ reverse cs writeHome :: T.Text -> IO () writeHome s = do
src/Main.hs view
@@ -11,7 +11,6 @@ import Post (generatePosts) import Home (generateHome) import Archive (generateArchive)-import Site (defaultSite) import Page (generatePages) import Constant import Paths_muon@@ -31,6 +30,7 @@ copyFile (d ++ "/templates/generic.st") "templates/generic.st" copyFile (d ++ "/pages/about") "pages/about" copyFile (d ++ "/pages/contact") "pages/contact"+ copyFile (d ++ "/config.ini") "config.ini" putStrLn "Initialised site directory" copyStatic = do@@ -49,8 +49,8 @@ \ generate generate static blog in 'site' directory\n\n\ \Report bugs to <kaashif@kaashif.co.uk>" -clearSite = mkdir sitePath - >> removeDirectoryRecursive sitePath +clearSite = mkdir sitePath+ >> removeDirectoryRecursive sitePath >> mkdir sitePath rsyncCmd = "rsync -a --delete site/ root@webserver:/var/www/htdocs/"
src/Page.hs view
@@ -13,16 +13,17 @@ let Just t = getStringTemplate "generic" templates return t -renderPage :: StringTemplate T.Text -> T.Text -> T.Text-renderPage t c = render- $ setAttribute "site" defaultSite+renderPage :: Site -> StringTemplate T.Text -> T.Text -> T.Text+renderPage s t c = render+ $ setAttribute "site" s $ setAttribute "content" c t renderPageFile :: String -> IO T.Text renderPageFile p = do c <- readFile $ "pages/" ++ p t <- pageTemplate- return $ renderPage t (T.pack c)+ s <- readSite+ return $ renderPage s t (T.pack c) writePage :: String -> T.Text -> IO () writePage p c = do
src/Post.hs view
@@ -31,21 +31,22 @@ let Just t = getStringTemplate "post" templates return t -renderPost :: StringTemplate T.Text -> Post -> T.Text-renderPost t p = render- $ setAttribute "site" defaultSite+renderPost :: Site -> StringTemplate T.Text -> Post -> T.Text+renderPost s t p = render+ $ setAttribute "site" s $ setAttribute "post" p t -renderName :: StringTemplate T.Text -> String -> IO T.Text-renderName t n = liftM (renderPost t) (getPost (0, n))+renderName :: Site -> StringTemplate T.Text -> String -> IO T.Text+renderName s t n = liftM (renderPost s t) (getPost (0, n)) makeExtract :: Post -> T.Text makeExtract p = T.pack $ "<h2>" ++ T.unpack (title p) ++ "</h2>" ++ "<h3>" ++ T.unpack (date p) ++ "</h3>" ++ unlines (take 25 $ lines $ T.unpack $ content p)- ++ "<br/><br/><a href=\'" ++ T.unpack (link p) ++ "\'>Read more...</a>"- ++ "</code></pre></li></ul></ol><hr/>"+ ++ "</code></pre></li></ul></ol></p>"+ ++ "<br/><a href=\'" ++ T.unpack (link p) ++ "\'>Read more...</a>"+ ++ "<br/><br/><hr/>" makePost :: (Int, [String]) -> Post makePost l = Post { title = T.pack $ head (snd l)@@ -78,7 +79,8 @@ templates <- directoryGroup "templates" :: IO (STGroup T.Text) let Just t = getStringTemplate "post" templates ns <- getNames- mapM (renderName t . snd) ns+ s <- readSite+ mapM (renderName s t . snd) ns writePosts :: [T.Text] -> IO () writePosts ps = mapM_ writePost (zip [1..(length ps)] ps)
src/Site.hs view
@@ -1,10 +1,12 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveDataTypeable #-}-module Site (defaultSite) where+module Site (Site, readSite) where import qualified Data.Text as T import Data.Typeable import Data.Data+import Data.ConfigFile+import Data.Either.Utils data Site = Site { title :: T.Text , style :: T.Text@@ -17,3 +19,16 @@ , author = "Your Name" , tagline = "Description of this blog" }++getSetting :: ConfigParser -> String -> T.Text+getSetting cp s = T.pack $ forceEither $ get cp "site" s++readSite :: IO Site+readSite = do+ r <- readfile emptyCP "config.ini"+ let cp = forceEither r+ return $ Site { title = getSetting cp "title"+ , style = getSetting cp "style"+ , author = getSetting cp "author"+ , tagline = getSetting cp "tagline"+ }
+ src/def/config.ini view
@@ -0,0 +1,5 @@+[site]+title=Default site+author=Your Name+tagline=Something descriptive+style=/style.css
src/def/style/style.css view
@@ -162,9 +162,7 @@ } hr {- border: 0; background: #aaa;- height: 0px; margin: 0 0 20px; }