From d8fc30f7c5470e259a33a470206df8b022f23eba Mon Sep 17 00:00:00 2001 From: Henning Thielemann Date: Sun, 29 Sep 2024 18:34:50 +0200 Subject: [PATCH] lib: Write.Html.Attribute.tableStyle: style definitions taken from Commands.Balance.multiBalanceReportAsHtml avoid duplicate with Write.Html.printHtml Write.Html.Attribute: remove dependency on Lucid --- hledger-lib/Hledger/Write/Html.hs | 9 ++---- hledger-lib/Hledger/Write/Html/Attribute.hs | 30 ++++++++++++------- hledger/Hledger/Cli/Commands/Balance.hs | 4 +-- hledger/Hledger/Cli/CompoundBalanceCommand.hs | 8 ++--- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/hledger-lib/Hledger/Write/Html.hs b/hledger-lib/Hledger/Write/Html.hs index 18f82b101..2a3b0533b 100644 --- a/hledger-lib/Hledger/Write/Html.hs +++ b/hledger-lib/Hledger/Write/Html.hs @@ -23,12 +23,7 @@ import Data.Foldable (traverse_) printHtml :: (Lines border) => [[Cell border (Lucid.Html ())]] -> Lucid.Html () printHtml table = do - Lucid.style_ $ Text.unlines $ - "" : - "table {border-collapse:collapse}" : - "th, td {padding-left:1em}" : - "th.account, td.account {padding-left:0;}" : - [] + Lucid.style_ Attr.tableStylesheet Lucid.table_ $ traverse_ formatRow table formatRow:: (Lines border) => [Cell border (Lucid.Html ())] -> Lucid.Html () @@ -50,7 +45,7 @@ formatCell cell = let style = case leftBorder++rightBorder++topBorder++bottomBorder of [] -> [] - ss -> [Attr.styles_ ss] in + ss -> [Lucid.style_ $ Attr.concatStyles ss] in let class_ = map Lucid.class_ $ filter (not . Text.null) [Spr.textFromClass $ cellClass cell] in diff --git a/hledger-lib/Hledger/Write/Html/Attribute.hs b/hledger-lib/Hledger/Write/Html/Attribute.hs index b20897ec8..875ed22c3 100644 --- a/hledger-lib/Hledger/Write/Html/Attribute.hs +++ b/hledger-lib/Hledger/Write/Html/Attribute.hs @@ -1,11 +1,12 @@ {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE FlexibleContexts #-} -- for stylesheet_ {- | Helpers and CSS styles for HTML output. -} module Hledger.Write.Html.Attribute ( - stylesheet_, - styles_, + stylesheet, + concatStyles, + tableStylesheet, + tableStyle, bold, doubleborder, topdoubleborder, @@ -20,20 +21,27 @@ module Hledger.Write.Html.Attribute ( 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 $ +stylesheet :: [(Text,Text)] -> Text +stylesheet elstyles = + Text.unlines $ "" : [el<>" {"<>styles<>"}" | (el,styles) <- elstyles] -styles_ :: [Text] -> Lucid.Attribute -styles_ = Lucid.style_ . Text.intercalate "; " +concatStyles :: [Text] -> Text +concatStyles = Text.intercalate "; " + + +tableStylesheet :: Text +tableStylesheet = stylesheet tableStyle + +tableStyle :: [(Text, Text)] +tableStyle = + [("table", collapse), + ("th, td", lpad), + ("th.account, td.account", "padding-left:0;")] bold, doubleborder, topdoubleborder, bottomdoubleborder :: Text bold = "font-weight:bold" diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index 7d5def0b9..16f561ff2 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -298,7 +298,7 @@ import Hledger.Cli.Utils import Hledger.Write.Csv (CSV, printCSV, printTSV) import Hledger.Write.Ods (printFods) import Hledger.Write.Html (printHtml) -import Hledger.Write.Html.Attribute (stylesheet_, collapse, lpad) +import Hledger.Write.Html.Attribute (tableStylesheet) import qualified Hledger.Write.Html as Html import qualified Hledger.Write.Spreadsheet as Ods @@ -811,7 +811,7 @@ multiBalanceReportAsHtml ropts mbr = let (headingsrow,bodyrows,mtotalsrows) = multiBalanceReportHtmlRows ropts mbr in do - stylesheet_ [("table",collapse), ("th, td",lpad), ("th.account, td.account","padding-left:0;")] + style_ tableStylesheet table_ $ mconcat $ [headingsrow] ++ bodyrows diff --git a/hledger/Hledger/Cli/CompoundBalanceCommand.hs b/hledger/Hledger/Cli/CompoundBalanceCommand.hs index 51d4ec5b8..98e74ced8 100644 --- a/hledger/Hledger/Cli/CompoundBalanceCommand.hs +++ b/hledger/Hledger/Cli/CompoundBalanceCommand.hs @@ -22,7 +22,7 @@ import qualified Data.Text.Lazy.Builder as TB import Data.Time.Calendar (Day, addDays) import System.Console.CmdArgs.Explicit as C (Mode, flagNone, flagReq) import Hledger.Write.Csv (CSV, printCSV, printTSV) -import Hledger.Write.Html.Attribute (stylesheet_, collapse, lpad, alignleft, alignright) +import Hledger.Write.Html.Attribute (stylesheet, tableStyle, alignleft, alignright) import qualified Hledger.Write.Html as Html import qualified Hledger.Write.Spreadsheet as Spr import Lucid as L hiding (value_) @@ -384,10 +384,8 @@ compoundBalanceReportAsHtml ropts cbr = in do link_ [rel_ "stylesheet", href_ "hledger.css"] - stylesheet_ [ - ("table",collapse), - ("th, td",lpad), - ("th.account, td.account","padding-left:0;"), + style_ $ stylesheet $ + tableStyle ++ [ ("td:nth-child(1)", "white-space:nowrap"), ("tr:nth-child(even) td", "background-color:#eee") ]