module Bamboo.Controller.Application where
import Bamboo.Controller.Env
import Bamboo.Controller.Comment
import Bamboo.Controller.Index
import Bamboo.Controller.Post
import Bamboo.Controller.Search
import Bamboo.Controller.Static
import Bamboo.Controller.Tag
import qualified Bamboo.Type.ThemeInterface as I
import Data.Maybe (catMaybes)
paths_with_theme :: I.Theme -> [(String, Application)]
paths_with_theme t =
[ x "/?$" I.Index index
, x "/?(\\?.+)?$" I.Index index
, x "/rss.xml$" I.IndexFeed index_feed
, x blog_regex I.Post post
, x "/static/." I.Static static
, x "/tag/.*/rss.xml$" I.TagFeed tag_feed
, x "/tag/." I.Tag tag
, for_extension Search $ x "/search" I.Search search
, for_extension Comment $ Just ("/comment/create", comment_create )
]
.catMaybes
.map_fst ("^" ++)
where
x a b c = Just (a, render_with_theme t (b, c))
blog_regex = "/" ++ static_config.url_date_matcher
render_with_theme :: I.Theme -> (I.Interface, Controller) -> Application
render_with_theme t (i, c) = run c (t i)
for_extension :: Extension -> Maybe a -> Maybe a
for_extension ext x =
if has_extension ext
then x
else Nothing