module Panda.Config.Global where import Panda.Helper.Helper import MPS import Prelude hiding ((.), (/), (^), id, readFile) import System.FilePath hiding ((<.>)) import System.IO.UTF8 (readFile, writeFile) import Control.Arrow ((>>>), (&&&), (***)) import Data.Maybe import System.Directory import Panda.Type.Reader import Panda.Type.Sidebar import Panda.Type.Theme db_id = "db" flat_id = "." post_id = "blog" config_id = "config" tag_id = "tag" comment_id = "comment" sidebar_id = "sidebar" theme_id = "theme" 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 post_uri = flat_uri / post_id tag_uri = flat_uri / tag_id comment_uri = flat_uri / comment_id theme_uri = flat_uri / config_id / theme_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' s = readFile s .purify .filter_comment .lines .map strip .map (split "\\s*=\\s*") .map tuple2 user_config = user_config' config_uri config_for' s d = user_config.lookup s .fromMaybe d config_for s = config_for' s s 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" root | user_root.belongs_to ["/", ""] = "/" | otherwise = user_root.("/" /).remove_trailing_slash where user_root = config_for' "root" "/" 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" "/favicon.ico" -- extensions analytics_account_id = config_for "analytics_account_id" -- theme default_theme = blank_theme user_theme_name = config_for "theme" user_theme_uri = (theme_uri / user_theme_name) ++ ".txt" theme = if user_theme_uri.doesFileExist.purify then user_config' user_theme_uri .(("name", user_theme_name) : ) .to_theme else default_theme -- custom as_l s = "[" ++ s ++ "]" post_date_format = config_for' "post_date_format" "%y-%m-%d %T" comment_date_format = config_for' "comment_date_format" "%y-%m-%d %T" url_date_format = config_for' "url_date_format" "%y-%m-%d" url_date_matcher = config_for' "url_date_matcher" "\\d{2}-\\d{2}-\\d{2}" url_title_subs = config_for' "url_title_subs" "" .as_l .read :: [(String, String)] url_date_title_seperator = config_for' "url_date_title_seperator" " "