corebot-bliki-0.2: src/Yesod/CoreBot/Bliki/Resources/Wiki.hs
module Yesod.CoreBot.Bliki.Resources.Wiki where
import Yesod.CoreBot.Bliki.Prelude
import Yesod.CoreBot.Bliki.Base
import Yesod.CoreBot.Bliki.Config
import Yesod.CoreBot.Bliki.Store
import Yesod.CoreBot.Bliki.Resources.Base
import Control.Monad.State.Strict
import Data.FileStore
import qualified Data.Text as Text
import Data.Time.Clock.POSIX
mk_wiki :: Data_ master -> IO ( Wiki_ master )
mk_wiki src_data = return $ Wiki src_data
-- XXX: needs json representation
getWikiIndexR :: Yesod master => [ Text ] -> GHandler ( Wiki_ master ) master RepHtml
getWikiIndexR node_path = do
liftIO $ putStrLn $ "index for node " ++ show node_path
wiki@(Wiki src_data) <- getYesodSub
defaultLayout $ do
let store_path = foldl (</>) "" $ map Text.unpack node_path
listing <- evalStateT (directory_listing store_path) ( store src_data )
let entry_names = [ Text.pack name | FSFile name <- listing ]
node_names = [ Text.pack name | FSDirectory name <- listing ]
let data_URL = data_routes (config src_data) $ EntryLatestR []
index_URL = wiki_routes (config src_data) $ WikiIndexR []
[whamlet|
<div .wiki_index>
<ul>/#{store_path}
$forall node_name <- node_names
<li .node_name><a href=@{index_URL}/#{store_path}/#{node_name}>#{node_name}
$forall entry_name <- entry_names
<li .entry_name><a href=@{data_URL}/#{store_path}/#{entry_name}>#{entry_name}
|]
mkYesodSubDispatch "Wiki_ master" [] [parseRoutes|
/*Texts WikiIndexR GET
|]