module Main where import Auxiliary import CGI import Persistent2 as P import Prelude hiding (div, head) import List (find) startWith :: Eq a => [a] -> [a] -> Bool startWith s1 s2 = (take (length s2) s1) == s2 commandLength :: String -> Int commandLength "/" = 1 commandLength s = length s + 1 selfLocation :: String -> Location selfLocation path = Location (read ("http://www.jmuk.org/test/hwiki/" ++ path)) commands :: [(String, String -> CGI())] commands = [("/edit", edit), ("/", view)] main :: IO () main = do pathInfo <- protectedGetEnv "PATH_INFO" "" run $ dispatch pathInfo where dispatch pathInfo = case find (startWith pathInfo . fst) commands of Just (path, func) -> func (drop (commandLength path) pathInfo) Nothing -> tell $ selfLocation "" view [] = view "FrontPage" view pageName = do pageHandle <- P.init pageName "" pageData <- P.get pageHandle if length pageData == 0 then edit pageName else ask $ standardPage pageName $ pre $ text_S pageData edit [] = tell $ selfLocation "" edit pageName = do pageHandle <- P.init pageName "" pageData <- P.get pageHandle ask $ standardPage ("edit of " ++ pageName) $ makeForm $ do submitPageData <- (makeTextarea pageData) (attr "cols" "80" ## attr "rows" "25") br empty submit submitPageData (update pageName) empty update pageName pageData = do pageHandle <- P.init pageName "" P.set pageHandle (value pageData) tell $ selfLocation pageName