web: show start and end dates of current filter period in heading, if any
This commit is contained in:
parent
56226d72e6
commit
cf62482102
@ -20,7 +20,7 @@ import Hledger.Cli.Commands.Register
|
||||
import Hledger.Cli.Options hiding (value)
|
||||
import Hledger.Cli.Utils
|
||||
import Hledger.Cli.Version (version)
|
||||
import Hledger.Data
|
||||
import Hledger.Data hiding (today)
|
||||
import Hledger.Read (journalFromPathAndString)
|
||||
import Hledger.Read.Journal (someamount)
|
||||
#ifdef MAKE
|
||||
@ -67,6 +67,7 @@ data TemplateData = TD {
|
||||
,a :: String -- ^ a (acct/desc filter pattern) parameter
|
||||
,p :: String -- ^ p (period expression) parameter
|
||||
,j :: Journal -- ^ the current journal
|
||||
,today :: Day -- ^ the current day
|
||||
}
|
||||
|
||||
mktd = TD {
|
||||
@ -76,6 +77,7 @@ mktd = TD {
|
||||
,a = ""
|
||||
,p = ""
|
||||
,j = nulljournal
|
||||
,today = ModifiedJulianDay 0
|
||||
}
|
||||
|
||||
-- | The web command.
|
||||
@ -171,13 +173,14 @@ getIndexPage = redirect RedirectTemporary defaultpage
|
||||
getAccountsJournalPage :: Handler HledgerWebApp RepHtml
|
||||
getAccountsJournalPage = do
|
||||
(a, p, opts, fspec, j, msg, here) <- getHandlerParameters
|
||||
today <- liftIO getCurrentDay
|
||||
-- app <- getYesod
|
||||
-- t <- liftIO $ getCurrentLocalTime
|
||||
let -- args = appArgs app
|
||||
-- fspec' = optsToFilterSpec opts args t
|
||||
br = balanceReportAsHtml opts td $ balanceReport opts fspec j
|
||||
jr = journalReportAsHtml opts td $ journalReport opts fspec j
|
||||
td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
editform' = editform td $ jtext j
|
||||
hamletToRepHtml $ pageLayout td [$hamlet|
|
||||
^scripts^
|
||||
@ -201,6 +204,7 @@ postAccountsJournalPage = postJournalOnlyPage
|
||||
getAccountsRegisterPage :: Handler HledgerWebApp RepHtml
|
||||
getAccountsRegisterPage = do
|
||||
(a, p, opts, fspec, j, msg, here) <- getHandlerParameters
|
||||
today <- liftIO getCurrentDay
|
||||
-- app <- getYesod
|
||||
-- t <- liftIO $ getCurrentLocalTime
|
||||
let -- args = appArgs app
|
||||
@ -208,7 +212,7 @@ getAccountsRegisterPage = do
|
||||
-- fspec' = optsToFilterSpec opts' args t
|
||||
br = balanceReportAsHtml opts td $ balanceReport opts fspec j
|
||||
rr = registerReportAsHtml opts td $ registerReport opts fspec j
|
||||
td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
editform' = editform td $ jtext j
|
||||
hamletToRepHtml $ pageLayout td [$hamlet|
|
||||
^scripts^
|
||||
@ -232,7 +236,8 @@ postAccountsRegisterPage = postJournalOnlyPage
|
||||
getAccountsPage :: Handler HledgerWebApp RepHtml
|
||||
getAccountsPage = do
|
||||
(a, p, opts, fspec, j, msg, here) <- getHandlerParameters
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
today <- liftIO getCurrentDay
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
hamletToRepHtml $ pageLayout td $ balanceReportAsHtml opts td $ balanceReport opts fspec j
|
||||
|
||||
-- | Render a balance report as HTML.
|
||||
@ -312,7 +317,8 @@ isAccountRegex s = take 1 s == "^" && (take 5 $ reverse s) == ")$|:("
|
||||
getJournalOnlyPage :: Handler HledgerWebApp RepHtml
|
||||
getJournalOnlyPage = do
|
||||
(a, p, opts, fspec, j, msg, here) <- getHandlerParameters
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
today <- liftIO getCurrentDay
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
editform' = editform td $ jtext j
|
||||
txns = journalReportAsHtml opts td $ journalReport opts fspec j
|
||||
hamletToRepHtml $ pageLayout td [$hamlet|
|
||||
@ -714,7 +720,8 @@ postImportForm = do
|
||||
getRegisterOnlyPage :: Handler HledgerWebApp RepHtml
|
||||
getRegisterOnlyPage = do
|
||||
(a, p, opts, fspec, j, msg, here) <- getHandlerParameters
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
today <- liftIO getCurrentDay
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
hamletToRepHtml $ pageLayout td $ registerReportAsHtml opts td $ registerReport opts fspec j
|
||||
|
||||
-- | Render a register report as HTML.
|
||||
@ -755,11 +762,12 @@ mixedAmountAsHtml b = preEscapedString $ addclass $ intercalate "<br>" $ lines $
|
||||
getEditPage :: Handler HledgerWebApp RepHtml
|
||||
getEditPage = do
|
||||
(a, p, _, _, _, msg, here) <- getHandlerParameters
|
||||
today <- liftIO getCurrentDay
|
||||
-- reload journal's text without parsing, if changed -- XXX are we doing this right ?
|
||||
j <- liftIO $ fromJust `fmap` getValue "hledger" "journal"
|
||||
changed <- liftIO $ journalFileIsNewer j
|
||||
s <- liftIO $ if changed then readFile (filepath j) else return (jtext j) -- XXX readFile may throw an error
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j}
|
||||
let td = mktd{here=here, title="hledger", msg=msg, a=a, p=p, j=j, today=today}
|
||||
hamletToRepHtml $ pageLayout td $ editform td s
|
||||
|
||||
----------------------------------------------------------------------
|
||||
@ -783,7 +791,7 @@ pageLayout td@TD{title=title, msg=msg} content = [$hamlet|
|
||||
metacontent = "text/html; charset=utf-8"
|
||||
|
||||
navbar :: TemplateData -> Hamlet HledgerWebAppRoute
|
||||
navbar TD{j=j} = [$hamlet|
|
||||
navbar TD{p=p,j=j,today=today} = [$hamlet|
|
||||
#navbar
|
||||
%a.topleftlink!href=$hledgerurl$
|
||||
hledger
|
||||
@ -791,8 +799,15 @@ navbar TD{j=j} = [$hamlet|
|
||||
$version$
|
||||
%a.toprightlink!href=$manualurl$!target=hledgerhelp manual
|
||||
%h1 $journaltitle$
|
||||
\ $
|
||||
%span#journalinfo $journalinfo$
|
||||
|]
|
||||
where journaltitle = printf "%s" (takeFileName $ filepath j) :: String
|
||||
where
|
||||
journaltitle = printf "%s" (takeFileName $ filepath j) :: String
|
||||
journalinfo = printf "%s" (showspan span) :: String
|
||||
showspan (DateSpan Nothing Nothing) = ""
|
||||
showspan s = " (showing " ++ dateSpanAsText s ++ ")"
|
||||
span = either (const $ DateSpan Nothing Nothing) snd (parsePeriodExpr today p)
|
||||
|
||||
navlinks :: TemplateData -> Hamlet HledgerWebAppRoute
|
||||
navlinks td = [$hamlet|
|
||||
|
||||
@ -200,7 +200,9 @@ fixOptDates opts = do
|
||||
-- others are ignored.
|
||||
dateSpanFromOpts :: Day -> [Opt] -> DateSpan
|
||||
dateSpanFromOpts refdate opts
|
||||
| not $ null popts = snd $ parsePeriodExpr refdate $ last popts
|
||||
| not (null popts) = case parsePeriodExpr refdate $ last popts of
|
||||
Right (_, s) -> s
|
||||
Left e -> parseerror e
|
||||
| otherwise = DateSpan lastb laste
|
||||
where
|
||||
popts = optValuesForConstructor Period opts
|
||||
@ -216,7 +218,9 @@ dateSpanFromOpts refdate opts
|
||||
intervalFromOpts :: [Opt] -> Interval
|
||||
intervalFromOpts opts =
|
||||
case (periodopts, intervalopts) of
|
||||
((p:_), _) -> fst $ parsePeriodExpr d p where d = parsedate "0001/01/01" -- unused
|
||||
((p:_), _) -> case parsePeriodExpr (parsedate "0001/01/01") p of
|
||||
Right (i, _) -> i
|
||||
Left e -> parseerror e
|
||||
(_, (DailyOpt:_)) -> Daily
|
||||
(_, (WeeklyOpt:_)) -> Weekly
|
||||
(_, (MonthlyOpt:_)) -> Monthly
|
||||
|
||||
@ -86,10 +86,16 @@ orDatesFrom (DateSpan a1 b1) (DateSpan a2 b2) = DateSpan a b
|
||||
b = if isJust b1 then b1 else b2
|
||||
|
||||
-- | Parse a period expression to an Interval and overall DateSpan using
|
||||
-- the provided reference date, or raise an error.
|
||||
parsePeriodExpr :: Day -> String -> (Interval, DateSpan)
|
||||
parsePeriodExpr refdate expr = (interval,span)
|
||||
where (interval,span) = fromparse $ parsewith (periodexpr refdate) expr
|
||||
-- the provided reference date, or return a parse error.
|
||||
parsePeriodExpr :: Day -> String -> Either ParseError (Interval, DateSpan)
|
||||
parsePeriodExpr refdate = parsewith (periodexpr refdate)
|
||||
|
||||
-- | Show a DateSpan as a human-readable pseudo-period-expression string.
|
||||
dateSpanAsText :: DateSpan -> String
|
||||
dateSpanAsText (DateSpan Nothing Nothing) = "all"
|
||||
dateSpanAsText (DateSpan Nothing (Just e)) = printf "to %s" (show e)
|
||||
dateSpanAsText (DateSpan (Just b) Nothing) = printf "from %s" (show b)
|
||||
dateSpanAsText (DateSpan (Just b) (Just e)) = printf "%s to %s" (show b) (show e)
|
||||
|
||||
-- | Convert a single smart date string to a date span using the provided
|
||||
-- reference date, or raise an error.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user