lib: Write.Html.Attributes: extracted HTML output helpers from Cli.Commands.Balance
This commit is contained in:
parent
4960d5f533
commit
6ce6c72fd4
@ -10,6 +10,7 @@ module Hledger.Write.Html (
|
|||||||
formatCell,
|
formatCell,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import qualified Hledger.Write.Html.Attribute as Attr
|
||||||
import qualified Hledger.Write.Spreadsheet as Spr
|
import qualified Hledger.Write.Spreadsheet as Spr
|
||||||
import Hledger.Write.Spreadsheet (Type(..), Style(..), Emphasis(..), Cell(..))
|
import Hledger.Write.Spreadsheet (Type(..), Style(..), Emphasis(..), Cell(..))
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ formatCell cell =
|
|||||||
let style =
|
let style =
|
||||||
case leftBorder++rightBorder++topBorder++bottomBorder of
|
case leftBorder++rightBorder++topBorder++bottomBorder of
|
||||||
[] -> []
|
[] -> []
|
||||||
ss -> [Lucid.style_ $ Text.intercalate "; " ss] in
|
ss -> [Attr.styles_ ss] in
|
||||||
let class_ =
|
let class_ =
|
||||||
map Lucid.class_ $
|
map Lucid.class_ $
|
||||||
filter (not . Text.null) [Spr.textFromClass $ cellClass cell] in
|
filter (not . Text.null) [Spr.textFromClass $ cellClass cell] in
|
||||||
|
|||||||
56
hledger-lib/Hledger/Write/Html/Attribute.hs
Normal file
56
hledger-lib/Hledger/Write/Html/Attribute.hs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE FlexibleContexts #-} -- for stylesheet_
|
||||||
|
{- |
|
||||||
|
Helpers and CSS styles for HTML output.
|
||||||
|
-}
|
||||||
|
module Hledger.Write.Html.Attribute (
|
||||||
|
stylesheet_,
|
||||||
|
styles_,
|
||||||
|
bold,
|
||||||
|
doubleborder,
|
||||||
|
topdoubleborder,
|
||||||
|
bottomdoubleborder,
|
||||||
|
alignright,
|
||||||
|
alignleft,
|
||||||
|
aligncenter,
|
||||||
|
collapse,
|
||||||
|
lpad,
|
||||||
|
rpad,
|
||||||
|
hpad,
|
||||||
|
vpad,
|
||||||
|
) where
|
||||||
|
|
||||||
|
import qualified Lucid.Base as LucidBase
|
||||||
|
import qualified Lucid
|
||||||
|
import qualified Data.Text as Text
|
||||||
|
import Data.Text (Text)
|
||||||
|
|
||||||
|
|
||||||
|
-- | result can be 'Lucid.Attribute' or @Lucid.Html ()@
|
||||||
|
stylesheet_ :: LucidBase.TermRaw Text result => [(Text,Text)] -> result
|
||||||
|
stylesheet_ elstyles =
|
||||||
|
Lucid.style_ $ Text.unlines $
|
||||||
|
"" : [el<>" {"<>styles<>"}" | (el,styles) <- elstyles]
|
||||||
|
|
||||||
|
styles_ :: [Text] -> Lucid.Attribute
|
||||||
|
styles_ = Lucid.style_ . Text.intercalate "; "
|
||||||
|
|
||||||
|
bold, doubleborder, topdoubleborder, bottomdoubleborder :: Text
|
||||||
|
bold = "font-weight:bold"
|
||||||
|
doubleborder = "double black"
|
||||||
|
topdoubleborder = "border-top:"<>doubleborder
|
||||||
|
bottomdoubleborder = "border-bottom:"<>doubleborder
|
||||||
|
|
||||||
|
alignright, alignleft, aligncenter :: Text
|
||||||
|
alignright = "text-align:right"
|
||||||
|
alignleft = "text-align:left"
|
||||||
|
aligncenter = "text-align:center"
|
||||||
|
|
||||||
|
collapse :: Text
|
||||||
|
collapse = "border-collapse:collapse"
|
||||||
|
|
||||||
|
lpad, rpad, hpad, vpad :: Text
|
||||||
|
lpad = "padding-left:1em"
|
||||||
|
rpad = "padding-right:1em"
|
||||||
|
hpad = "padding-left:1em; padding-right:1em"
|
||||||
|
vpad = "padding-top:1em; padding-bottom:1em"
|
||||||
@ -88,6 +88,7 @@ library
|
|||||||
Hledger.Write.Csv
|
Hledger.Write.Csv
|
||||||
Hledger.Write.Ods
|
Hledger.Write.Ods
|
||||||
Hledger.Write.Html
|
Hledger.Write.Html
|
||||||
|
Hledger.Write.Html.Attribute
|
||||||
Hledger.Write.Spreadsheet
|
Hledger.Write.Spreadsheet
|
||||||
Hledger.Reports
|
Hledger.Reports
|
||||||
Hledger.Reports.ReportOptions
|
Hledger.Reports.ReportOptions
|
||||||
|
|||||||
@ -152,6 +152,7 @@ library:
|
|||||||
- Hledger.Write.Csv
|
- Hledger.Write.Csv
|
||||||
- Hledger.Write.Ods
|
- Hledger.Write.Ods
|
||||||
- Hledger.Write.Html
|
- Hledger.Write.Html
|
||||||
|
- Hledger.Write.Html.Attribute
|
||||||
- Hledger.Write.Spreadsheet
|
- Hledger.Write.Spreadsheet
|
||||||
- Hledger.Reports
|
- Hledger.Reports
|
||||||
- Hledger.Reports.ReportOptions
|
- Hledger.Reports.ReportOptions
|
||||||
|
|||||||
@ -234,8 +234,6 @@ Currently, empty cells show 0.
|
|||||||
-}
|
-}
|
||||||
|
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
{-# LANGUAGE ExtendedDefaultRules #-} -- for lucid_
|
|
||||||
{-# LANGUAGE FlexibleContexts #-} -- for stylesheet_
|
|
||||||
{-# LANGUAGE NamedFieldPuns #-}
|
{-# LANGUAGE NamedFieldPuns #-}
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-# LANGUAGE ScopedTypeVariables #-}
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
@ -262,21 +260,6 @@ module Hledger.Cli.Commands.Balance (
|
|||||||
,multiBalanceReportAsSpreadsheet
|
,multiBalanceReportAsSpreadsheet
|
||||||
,addTotalBorders
|
,addTotalBorders
|
||||||
,RowClass(..)
|
,RowClass(..)
|
||||||
-- ** HTML output helpers
|
|
||||||
,stylesheet_
|
|
||||||
,styles_
|
|
||||||
,bold
|
|
||||||
,doubleborder
|
|
||||||
,topdoubleborder
|
|
||||||
,bottomdoubleborder
|
|
||||||
,alignright
|
|
||||||
,alignleft
|
|
||||||
,aligncenter
|
|
||||||
,collapse
|
|
||||||
,lpad
|
|
||||||
,rpad
|
|
||||||
,hpad
|
|
||||||
,vpad
|
|
||||||
-- ** Tests
|
-- ** Tests
|
||||||
,tests_Balance
|
,tests_Balance
|
||||||
) where
|
) where
|
||||||
@ -310,6 +293,7 @@ import Hledger.Cli.Utils
|
|||||||
import Hledger.Write.Csv (CSV, printCSV, printTSV)
|
import Hledger.Write.Csv (CSV, printCSV, printTSV)
|
||||||
import Hledger.Write.Ods (printFods)
|
import Hledger.Write.Ods (printFods)
|
||||||
import Hledger.Write.Html (printHtml)
|
import Hledger.Write.Html (printHtml)
|
||||||
|
import Hledger.Write.Html.Attribute (stylesheet_, collapse, lpad)
|
||||||
import qualified Hledger.Write.Html as Html
|
import qualified Hledger.Write.Html as Html
|
||||||
import qualified Hledger.Write.Spreadsheet as Ods
|
import qualified Hledger.Write.Spreadsheet as Ods
|
||||||
|
|
||||||
@ -733,24 +717,6 @@ multiBalanceReportAsSpreadsheetHelper ishtml opts@ReportOpts{..} (PeriodicReport
|
|||||||
let fmt = if ishtml then oneLineNoCostFmt else machineFmt
|
let fmt = if ishtml then oneLineNoCostFmt else machineFmt
|
||||||
in map (map (fmap wbToText)) . multiBalanceRowAsCellBuilders fmt opts colspans rc
|
in map (map (fmap wbToText)) . multiBalanceRowAsCellBuilders fmt opts colspans rc
|
||||||
|
|
||||||
-- Helpers and CSS styles for HTML output.
|
|
||||||
|
|
||||||
stylesheet_ elstyles = style_ $ T.unlines $ "" : [el<>" {"<>styles<>"}" | (el,styles) <- elstyles]
|
|
||||||
styles_ :: [Text] -> L.Attribute
|
|
||||||
styles_ = style_ . T.intercalate "; "
|
|
||||||
bold = "font-weight:bold"
|
|
||||||
doubleborder = "double black"
|
|
||||||
topdoubleborder = "border-top:"<>doubleborder
|
|
||||||
bottomdoubleborder = "border-bottom:"<>doubleborder
|
|
||||||
alignright, alignleft, aligncenter :: Text
|
|
||||||
alignright = "text-align:right"
|
|
||||||
alignleft = "text-align:left"
|
|
||||||
aligncenter = "text-align:center"
|
|
||||||
collapse = "border-collapse:collapse"
|
|
||||||
lpad = "padding-left:1em"
|
|
||||||
rpad = "padding-right:1em"
|
|
||||||
hpad = "padding-left:1em; padding-right:1em"
|
|
||||||
vpad = "padding-top:1em; padding-bottom:1em"
|
|
||||||
|
|
||||||
-- | Render a multi-column balance report as HTML.
|
-- | Render a multi-column balance report as HTML.
|
||||||
multiBalanceReportAsHtml :: ReportOpts -> MultiBalanceReport -> Html ()
|
multiBalanceReportAsHtml :: ReportOpts -> MultiBalanceReport -> Html ()
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import qualified Data.Text.Lazy.Builder as TB
|
|||||||
import Data.Time.Calendar (Day, addDays)
|
import Data.Time.Calendar (Day, addDays)
|
||||||
import System.Console.CmdArgs.Explicit as C (Mode, flagNone, flagReq)
|
import System.Console.CmdArgs.Explicit as C (Mode, flagNone, flagReq)
|
||||||
import Hledger.Write.Csv (CSV, printCSV, printTSV)
|
import Hledger.Write.Csv (CSV, printCSV, printTSV)
|
||||||
|
import Hledger.Write.Html.Attribute (stylesheet_, collapse, lpad, alignright)
|
||||||
import qualified Hledger.Write.Html as Html
|
import qualified Hledger.Write.Html as Html
|
||||||
import qualified Hledger.Write.Spreadsheet as Spr
|
import qualified Hledger.Write.Spreadsheet as Spr
|
||||||
import Lucid as L hiding (value_)
|
import Lucid as L hiding (value_)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user