{-# LANGUAGE RecordWildCards #-} {-# OPTIONS_GHC -F -pgmFhsx2hs #-} module Clckwrks.Bugs.Page.Timeline where import Clckwrks import Clckwrks.Bugs.Acid import Clckwrks.Bugs.Monad import Clckwrks.Bugs.Types import Clckwrks.Bugs.URL import Clckwrks.Bugs.Page.Template (template) import qualified Data.IxSet as IxSet import Data.List (find) import Data.String (fromString) import qualified Data.Text.Lazy as Text import Numeric (showFFloat) import HSP.XML import HSP.XMLGenerator timeline :: BugsM Response timeline = template (fromString "Timeline") () <%>

Timeline

<% timelineWidget %> timelineWidget :: XMLGenT BugsM XML timelineWidget = do ms <- query GetMilestones ixBugs <- query $ BugsForMilestones (map milestoneId ms)
<% mapM (showMilestone ms) (IxSet.groupBy ixBugs) %>
showMilestone :: [Milestone] -> (MilestoneId, [Bug]) -> XMLGenT BugsM [ChildType BugsM] showMilestone ms (mid, bugs) = case find (\m -> milestoneId m == mid) ms of Nothing -> <%>internal error: showMilestone - not found <% show mid %> (Just m) -> do completed <- query (MilestoneCompletion mid) <%>

<% milestoneTitle m %>

<% maybe (return $ cdata $ fromStringLit "") meter completed %> <% mapM showBugSummary bugs %>
BugId Summary
showBugSummary :: Bug -> XMLGenT BugsM XML showBugSummary (Bug BugMeta{..} bugBody) = <% bugId %> <% bugTitle %> meter :: (Real a) => a -- ^ a number between 0 and 1 indicating percentage complete -> XMLGenT BugsM XML meter completed =