nomyx-web-1.0.0: src/Nomyx/Web/Game/Details.hs
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE OverloadedStrings #-}
module Nomyx.Web.Game.Details where
import Data.List
import Data.Maybe
import Data.String
import Data.Text (Text)
import Data.Time
import Nomyx.Language
import Nomyx.Core.Engine
import Nomyx.Web.Common as NWC
import qualified Nomyx.Web.Help as Help
import Text.Blaze.Html5 (Html, h4, p, table, td, thead, tr, (!))
import Text.Blaze.Html5.Attributes as A (class_, style)
import Imprevu.Evaluation
default (Integer, Double, Data.Text.Text)
viewDetails :: PlayerNumber -> Game -> Html
viewDetails pn g = do
p $ titleWithHelpIcon (h4 "Variables:") Help.variables
viewVars (_variables g)
p $ titleWithHelpIcon (h4 "Events:") Help.events
viewEvents g
p $ h4 "Log:"
viewLogs (_logs g) pn
viewEvents :: Game -> Html
viewEvents g = table ! class_ "table" $ do
thead $ do
td ! class_ "td" $ "Event Number"
td ! class_ "td" $ "By Rule"
td ! class_ "td" $ "Event"
mapM_ (viewEvent g) (sort $ _events g)
viewEvent :: Game -> RuleEventInfo -> Html
viewEvent g (RuleEventInfo ruleNumber ei@(EventInfo eventNumber _ _ status _)) = if status == SActive then disp else disp ! style "background:gray;" where
disp = tr $ do
let ss = getRemainingSignals ei (EvalEnv (EvalState g 0) defaultEvalConf)
td ! class_ "td" $ fromString . show $ eventNumber
td ! class_ "td" $ fromString . show $ ruleNumber
td ! class_ "td" $ fromString . show $ ss
viewVars :: [Var] -> Html
viewVars vs = table ! class_ "table" $ do
thead $ do
td ! class_ "td" $ "Rule number"
td ! class_ "td" $ "Name"
td ! class_ "td" $ "Value"
mapM_ viewVar vs
viewVar :: Var -> Html
viewVar (Var vRuleNumber vName vData) = tr $ do
td ! class_ "td" $ fromString . show $ vRuleNumber
td ! class_ "td" $ fromString . show $ vName
td ! class_ "td" $ fromString . show $ vData
viewLogs :: [Log] -> PlayerNumber -> Html
viewLogs log pn = do
let ls = filter (\o -> (_lPlayerNumber o == Just pn) || (isNothing $ _lPlayerNumber o)) log
table $ mapM_ viewLog (reverse ls)
viewLog :: Log -> Html
viewLog (Log _ t s) = tr $ do
td $ fromString $ formatTime defaultTimeLocale "%Y/%m/%d_%H:%M" t
td $ p $ fromString s