packages feed

panda-2008.9.28: Panda/Config/Global.hs

module Panda.Config.Global where

import Panda.Helper.Env
import Prelude hiding ((.), (/), (^), id, readFile)
import Panda.Type.Reader
import Panda.Type.Sidebar

db_id       = "db"
flat_id     = "."
blog_id     = "blog"
config_id   = "config"
tag_id      = "tag"
comment_id  = "comment"
sidebar_id  = "sidebar"

db_uri      = db_id
flat_uri    = db_uri / flat_id

config_uri  = flat_uri / config_id / "site.txt"
sidebar_uri = flat_uri / config_id / sidebar_id
blog_uri    = flat_uri / blog_id
tag_uri     = flat_uri / tag_id
comment_uri = flat_uri / comment_id


-- unsafe, must restart server after changing config file, sorry about that ...
-- but these configs are read only, and keep the view pure, so no monad headaches involved.

user_config     = readFile config_uri .purify .filter_comment .lines .map strip .map (split "\\s*=\\s*") .map tuple2
config_for' s d = user_config.lookup s .fromMaybe d
config_for s    = config_for' s s

parse_config s = s.split "," .map strip .reject null

blog_title      = config_for "blog_title"
blog_subtitle   = config_for "blog_subtitle"
host_name       = config_for "host_name"
author_email    = config_for "author_email" 

per_page        = config_for' "per_page" "7" .read :: Int
navigation      = config_for' "navigation" "About" .parse_config.("Home" :)

panda_url       = "http://github.com/nfjinjing/panda"

default_reader  = Markdown

sidebar = config_for "sidebar" .parse_config .map (sidebar_uri /).select (to_utf8 >>> doesFileExist >>> purify )
  .map (read_sidebar_item default_reader >>> purify)
  
favicon = config_for "favicon"



-- for extensions
analytics_account_id = config_for "analytics_account_id"