packages feed

MFlow-0.4.5.5: Demos/InitialConfig.hs

{-# LANGUAGE  CPP, DeriveDataTypeable, ScopedTypeVariables #-}


module InitialConfig (initialConfig) where
import Data.Typeable
import Data.String(fromString)


-- #define ALONE -- to execute it alone, uncomment this
#ifdef ALONE
import MFlow.Wai.Blaze.Html.All as MF
main= runNavigation "" initialConfig
#else
import MFlow.Wai.Blaze.Html.All as MF hiding(retry, page)
import Menu
#endif

data Skin= Normal |  Blue | Red deriving (Read,Show,Typeable, Bounded, Enum)

initialConfig= do
   mskin <-  getSessionData
   skin <- case mskin of
    Nothing -> do
     s <- step . page $ p << "choose skin"
                    ++> wlink Normal  << p << "normal"
                    <|> wlink Blue    << p << "blue"
                    <|> wlink Red     << p << "red"
     setSessionData s
     return s
    Just sk -> return sk
   step $ restOfTheFlow skin

   where
   restOfTheFlow skin = do
        r  <- page  $ p << ("skin chosen so far: "++ show skin)
                  ++> p << ("you choosen the skin " ++ show skin)
                  ++> wlink "change" << MF.div << "Change the skin"
                  <++ br
                  <|> wlink "doOther" << p << "other things"
        case r of
           "change" -> breturn ()
           _ ->do
                  page  $ p << ("skin chosen so far: "++ show skin)
                      ++> p << "other things"
                      ++> a ! href (fromString "http://www.google.com") << p << "google"
                      ++> br
                      ++> wlink() << p << "press here to return to the salutation"
                  restOfTheFlow  skin