{-# OPTIONS -fno-monomorphism-restriction #-} module Panda.Controller.Application (pages) where import qualified Data.Map as Map -- env import Panda.Helper.Env import Prelude hiding ((.), (/), id) import Kibro (kibro) import Kibro.DB.Sqlite3 import Panda.Type.State hiding (pager) import qualified Panda.Config.Global as Config import qualified Panda.Type.Pager as Pager -- model import Panda.Model.Post as Post import Panda.Model.Tag as Tag -- view import qualified Panda.View.Theme.BluePrint.Post as PostV import qualified Panda.View.Theme.BluePrint.Template as T import qualified Panda.View.Theme.BluePrint.Static as StaticV import qualified Panda.View.Theme.BluePrint.Tag as TagV import qualified Panda.View.RSS as RSS blog_regex = "^/[0-9][0-9]-[0-9][0-9]-[0-9][0-9]" pages = [ ("^/$" ,index ) , ("^/([?].+$)?$" ,index ) , ("^/rss.xml$" ,blog_feed ) , (blog_regex ,blog ) , ("^/static/." ,static ) , ("^/tag/." ,tag ) , ("^/tag/.*([?].+$)?$" ,index ) ] index = do blogs <- Post.list.liftIO p <- pager 10 $ blogs.length tags <- Tag.list.liftIO let nav = if p.Pager.current == 1 then Home else Other let state = State Config.blog_id p tags nav blogs.map (Tag.fill_tag tags) .PostV.list state .output_html blog_feed = do blogs <- Post.list.liftIO blogs.RSS.rss.output blog = do id <- uri <.> ("blog/" ++) blog <- Post.get id .liftIO tags <- Tag.list.liftIO let state = State id Pager.empty tags Other blog.Tag.fill_tag tags .PostV.view state .output_html static = do id <- uri tags <- Tag.list.liftIO let nav = if id.split "/" .tail.join "/" == "about" then About else Other let state = State id Pager.empty tags nav (Config.flat_uri / id) .readFile .liftIO <.> StaticV.view state >>= output_html tag = do id <- uri tags <- Tag.list.liftIO let tag_name = Tag.name_from_id id case Tag.tag_map' tags .Map.lookup tag_name of Nothing -> "page not found" .output Just blog_set -> do blogs <- blog_set.to_list.rsort.mapM (Post.get) .liftIO <.> map (Tag.fill_tag tags) p <- pager 10 $ blogs.length let state = State id p tags Other blogs.TagV.view state.output_html