packages feed

clckwrks-dot-com-0.3.11: Main.hs

{-# LANGUAGE FlexibleContexts, OverloadedStrings #-}
module Main where

import Clckwrks
import Clckwrks.GetOpts             (parseArgs, clckwrksOpts)
import Clckwrks.Server              (simpleClckwrks)
import Clckwrks.Plugin              (clckPlugin)
import Clckwrks.Authenticate.Plugin (authenticatePlugin)
-- import Clckwrks.Bugs.Plugin         (bugsPlugin)
import Clckwrks.Media.Plugin        (mediaPlugin)
import Clckwrks.Page.Plugin         (pagePlugin)
import Clckwrks.Page.URL            (PageURL(..))
import Control.Applicative          ((<$>))
import Data.Text                    (Text)
import Theme                        (theme)
import Web.Plugins.Core             (Plugin(..), addHandler, getPluginRouteFn, initPlugin, setTheme)
import System.Environment           (getArgs)

------------------------------------------------------------------------------
-- ClckwrksConfig
------------------------------------------------------------------------------

clckwrksConfig :: ClckwrksConfig
clckwrksConfig = ClckwrksConfig
    { clckHostname        = "localhost"
    , clckHidePort        = False
    , clckPort            = 8000
    , clckTLS             = Nothing      -- disable TLS by default
    , clckJQueryPath      = "../jquery"  -- directory containing 'jquery.js'
    , clckJQueryUIPath    = ""           -- directory containing 'jquery.js'
    , clckJSTreePath      = "../jstree"  -- directory containing 'jquery.jstree.js'
    , clckJSON2Path       = "../json2"   -- directory containing 'json2.js'
    , clckTopDir          = Nothing
    , clckEnableAnalytics = False
    , clckInitHook        = initHook
    }

------------------------------------------------------------------------------
-- main
------------------------------------------------------------------------------

main :: IO ()
main =
    do args <- getArgs
       f    <- parseArgs (clckwrksOpts clckwrksConfig) args
       simpleClckwrks =<< f clckwrksConfig

initHook :: Text
         -> ClckState
         -> ClckwrksConfig
         -> IO (ClckState, ClckwrksConfig)
initHook baseURI clckState cc =
    do let p = plugins clckState
       addHandler p "blog" blogHandler
       initPlugin p "" clckPlugin
       initPlugin p "http://www.clckwrks.com" authenticatePlugin
--       initPlugin p "http://localhost:8000" authenticatePlugin
       initPlugin p "" pagePlugin
--       initPlugin p "" bugsPlugin
       initPlugin p "" mediaPlugin
       setTheme p (Just theme)
       return (clckState, cc)

blogHandler :: ClckPlugins -> [Text] -> ClckT ClckURL (ServerPartT IO) Response
blogHandler plugins paths =
    do (Just showPageURL) <- getPluginRouteFn plugins (pluginName pagePlugin)
       case paths of
         [] ->
            do let blogURL = showPageURL Blog []
               seeOther blogURL (toResponse ())
         ["atom.xml"] ->
             do let atomURL = showPageURL AtomFeed []
                seeOther atomURL (toResponse ())
         _ -> notFound (toResponse ())