{-# LANGUAGE OverloadedStrings #-}
module Graphics.Vega.VegaLite.Theme
( theme
) where
import Graphics.Vega.VegaLite
import qualified Data.Text as T
data Config = Config { configFontSize :: Double
, configFont :: T.Text
, configLabelFont :: T.Text
, configAxisColor :: T.Text
, configHeight :: Double
, configWidth :: Double
}
defaultConfig :: Config
defaultConfig = Config { configFontSize = 12
, configFont = "Arial"
, configLabelFont = "Arial"
, configAxisColor = "#000000"
, configHeight = 300
, configWidth = 400
}
theme :: Config -> [LabelledSpec] -> (VLProperty, VLSpec)
theme c = configure
. configuration (View $ viewConfig c)
. configuration (Legend $ legendConfig c)
. configuration (TitleStyle $ titleConfig c)
. configuration (Axis $ axisConfig c)
. configuration (AxisX $ axisConfig c)
. configuration (AxisY $ axisConfig c)
viewConfig :: Config -> [ViewConfig]
viewConfig c = [ ViewHeight (configHeight c)
, ViewWidth (configWidth c)
, StrokeOpacity 0
]
legendConfig :: Config -> [LegendConfig]
legendConfig c = [ LeLabelFontSize (configFontSize c)
, LeTitleFontSize (configFontSize c)
]
titleConfig :: Config -> [TitleConfig]
titleConfig c = [ TFontSize (configFontSize c)
, TFont (configFont c)
, TColor "#000000"
, TFontWeight Normal
]
axisConfig :: Config -> [AxisConfig]
axisConfig c = [ Grid False
, DomainColor "#000000"
, LabelFont (configLabelFont c)
, LabelFontSize (configFontSize c)
, LabelAngle 0
, TickColor (configAxisColor c)
, TitleFont (configFont c)
, TitleFontSize (configFontSize c)
, TitleFontWeight Normal
]