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)