eventlog2html-0.11.0: src/Eventlog/Rendering/Types.hs
{-# LANGUAGE OverloadedStrings #-}
module Eventlog.Rendering.Types where
import Data.Char
import Data.String
import qualified Data.Text as T
import Text.Blaze.Html5
data IncludeTraceData
= TraceData
| NoTraceData
-- | Tab IDs must be usable as HTML and Javascript identifiers, so we allow a
-- limited selection of characters. This is enforced only at runtime by
-- 'mkTabID' and the 'IsString' instance, but that seems good enough for now.
newtype TabID = TabID T.Text
instance IsString TabID where
fromString = mkTabID
mkTabID :: String -> TabID
mkTabID s
| all valid s = TabID (T.pack s)
| otherwise = error $ "mkTabID: invalid tab ID: " ++ s
where
valid c = isAscii c && (isAlpha c || isDigit c || c == '_')
tabIDToVizID :: TabID -> T.Text
tabIDToVizID (TabID t) = "vis" <> t
tabIDToNavItemID :: TabID -> T.Text
tabIDToNavItemID (TabID t) = t <> "-tab"
tabIDToTabID :: TabID -> T.Text
tabIDToTabID (TabID t) = t
tabIDToHref :: TabID -> T.Text
tabIDToHref (TabID t) = "#" <> t
data TabGroup = ManyTabs String [Tab]
| SingleTab Tab
data Tab = Tab { tabName :: String
, tabId :: TabID
, tabContent :: Maybe Html
, tabDocs :: Maybe Html
, tabActive :: Bool -- ^ Active by default?
, tabDisabled :: Bool
}
mkTab :: String -> TabID -> Html -> Maybe Html -> Tab
mkTab name id_ content docs = Tab name id_ (Just content) docs False False
mkUnavailableTab :: String -> TabID -> Html -> Tab
mkUnavailableTab name id_ docs = Tab name id_ Nothing (Just docs) False True
mkOptionalTab :: String -> TabID -> (a -> Html) -> Maybe Html -> Html -> Maybe a -> Tab
mkOptionalTab name id_ mk_content docs no_docs mb = case mb of
Nothing -> mkUnavailableTab name id_ no_docs
Just v -> mkTab name id_ (mk_content v) docs
noDocs :: Maybe Html
noDocs = Nothing