module Simulation.Aivika.Experiment.ExperimentSpecsView
(ExperimentSpecsView(..),
defaultExperimentSpecsView) where
import Control.Monad
import Control.Monad.Trans
import Simulation.Aivika.Experiment
import Simulation.Aivika.Experiment.HtmlWriter
import Simulation.Aivika.Experiment.ExperimentSpecsWriter
data ExperimentSpecsView =
ExperimentSpecsView { experimentSpecsTitle :: String,
experimentSpecsDescription :: String,
experimentSpecsWriter :: ExperimentSpecsWriter
}
defaultExperimentSpecsView :: ExperimentSpecsView
defaultExperimentSpecsView =
ExperimentSpecsView { experimentSpecsTitle = "Experiment Specs",
experimentSpecsDescription = "It shows the experiment specs.",
experimentSpecsWriter = defaultExperimentSpecsWriter }
instance View ExperimentSpecsView where
outputView v =
let reporter exp dir =
do st <- newExperimentSpecs v exp
return Reporter { reporterInitialise = return (),
reporterFinalise = return (),
reporterSimulate = const $ return $ return (),
reporterTOCHtml = experimentSpecsTOCHtml st,
reporterHtml = experimentSpecsHtml st }
in Generator { generateReporter = reporter }
data ExperimentSpecsViewState =
ExperimentSpecsViewState { experimentSpecsView :: ExperimentSpecsView,
experimentSpecsExperiment :: Experiment }
newExperimentSpecs :: ExperimentSpecsView -> Experiment -> IO ExperimentSpecsViewState
newExperimentSpecs view exp =
return ExperimentSpecsViewState { experimentSpecsView = view,
experimentSpecsExperiment = exp }
experimentSpecsHtml :: ExperimentSpecsViewState -> Int -> HtmlWriter ()
experimentSpecsHtml st index =
do header st index
let writer = experimentSpecsWriter (experimentSpecsView st)
write = experimentSpecsWrite writer
exp = experimentSpecsExperiment st
write writer exp
header :: ExperimentSpecsViewState -> Int -> HtmlWriter ()
header st index =
do writeHtmlHeader3WithId ("id" ++ show index) $
writeHtmlText (experimentSpecsTitle $ experimentSpecsView st)
let description = experimentSpecsDescription $ experimentSpecsView st
unless (null description) $
writeHtmlParagraph $
writeHtmlText description
experimentSpecsTOCHtml :: ExperimentSpecsViewState -> Int -> HtmlWriter ()
experimentSpecsTOCHtml st index =
writeHtmlListItem $
writeHtmlLink ("#id" ++ show index) $
writeHtmlText (experimentSpecsTitle $ experimentSpecsView st)