X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Main.hs;h=3c634d36796ec7e71fb86a52138c7974d4b26acd;hb=58e04761af30e092662dac331493200ccca48650;hp=c8d5524c32af97a80f24876fc408de25e029f950;hpb=733b60938d6d41ce0fccb5833b1caa7f1046b9d0;p=yawbih.git diff --git a/Main.hs b/Main.hs index c8d5524..3c634d3 100644 --- a/Main.hs +++ b/Main.hs @@ -6,19 +6,23 @@ import CGIOutput import CGITypes import System import Wiki +import Control.Monad import Text.ParserCombinators.Parsec -testDB = createPGB "wave" "wiki" "wiki" "12wiki34db" +testDB = createPGB "localhost" "wiki" "wiki" "12wiki34db" +test key = do + db <- testDB + s <- getCurrent db key + print s + --main = start [] cgi main = do db <- testDB runWithHook [] (\(key:act) -> showPage db (filter (/= '\\') key)) $ showPage db "MainPage" -ps a = standardQuery "Hello" a - editPage db key = do s <- io $ getCurrent db key s' <- case s of @@ -32,10 +36,7 @@ editPage db key = do p empty text "Comment: " c <- textInputField (fieldSIZE 20) - --p $ submit (F2 t a) testing (attr "value" "Send") p $ defaultSubmit (F3 t a c) (savePage db key) (attr "value" "Send") - --submit0 (sp db key []) (attr "value" "Send1") - savePage db key (F3 t a c) = do io $ update db key fulltext author comment @@ -52,11 +53,11 @@ showPage db key = do Nothing -> text "No text added for this keyword" Just (full, date) -> do parseText full - p $ text $ "Last edited: "++date + p $ tt $ text $ "Last edited: "++date footer db key parseText full = case parse wikiParser "" full of - Right n -> ex n + Right n -> toWash n Left e -> do text "PARSE ERROR: " text (show e) @@ -65,17 +66,32 @@ parseText full = case parse wikiParser "" full of footer db key = do hr empty table $ tr $ do - td $ submitLink0 (editPage db key) (text "Edit this keyword") - td $ submitLink0 (listRevs db key) (text "List old versions") + td $ submitLink0 (showPage db "MainPage") (text "Back to main page") + when (e key) $ td $ submitLink0 (editPage db key) (text "Edit this keyword") + when (e key) $ td $ submitLink0 (listRevs db key) (text "List old versions") + td $ submitLink0 (listKeywords db) (text "List all keywords") td $ text "Keyword: " td $ activate (showPage db) textInputField empty +e "" = False +e _ = True + listRevs db key = do list <- io $ getList db key - standardQuery key $ table $ do - tr $ mapM (\header -> th (text header)) - ["Id", "Date", "Author", "Comment"] - mapM (revRow db key) list + standardQuery key $ do + table $ do + tr $ mapM (\header -> th (text header)) + ["Id", "Date", "Author", "Comment"] + mapM (revRow db key) list + footer db key + +listKeywords db = do + list <- io $ listKeys db + standardQuery "List of keywords" $ do + table (do + tr $ th (text "Keyword") + mapM (\key -> tr $ td $ linkKey db key) list) + footer db "" linkKey db key = submitLink0 (showPage db key) (text key) @@ -102,25 +118,47 @@ changeCurrent db key id = do p empty linkKey db key -ex [] = return () -ex ((Paragraph):xs) = do +toWash [] = return () +toWash ((Paragraph):xs) = do p empty - ex xs -ex ((Text s):xs) = do + toWash xs +toWash ((Text s):xs) = do text s - ex xs -ex ((Link l d):xs) = do + toWash xs +toWash ((Link l d):xs) = do hlink (URL {unURL = ("wiki?"++l)}) (text d) - ex xs - -ex2 [] = [] -ex2 ((Paragraph):xs) = "

"++ex2 xs -ex2 ((Text s):xs) = s++ex2 xs -ex2 ((Link l d):xs) = ""++ex2 xs - - -test s = case parse wikiParser "" s of - Right n -> do - print (ex2 n) - Left e -> do - print e + toWash xs +toWash ((Bold d):xs) = do + b (toWash d) + toWash xs +toWash ((Emph d):xs) = do + em (toWash d) + toWash xs +toWash ((Underline d):xs) = do + u (toWash d) + toWash xs +toWash ((Strike d):xs) = do + strike (toWash d) + toWash xs +toWash ((Heading n d):xs) = do + heading n $ toWash d + toWash xs +toWash ((Url l):xs) = do + hlink (URL {unURL = (l)}) (text $ stripMailto l) + toWash xs +toWash ((Pre s):xs) = do + pre $ text s + toWash xs +toWash ((List l):xs) = do + ul $ mapM (\s -> li $ toWash s) l + toWash xs + +stripMailto ('m':'a':'i':'l':'t':'o':':':xs) = xs +stripMailto xs = xs + +heading 1 = h1 +heading 2 = h2 +heading 3 = h3 +heading 4 = h4 +heading 5 = h5 +heading 6 = h6