{-# LANGUAGE MultiWayIf #-} {-# LANGUAGE RecordWildCards #-} module Text.Time.Pretty.Render ( renderDaysAgoAuto, renderTimeAgoAuto, ) where import Text.Time.Pretty.TimeAgo renderDaysAgoAuto :: DaysAgo -> String renderDaysAgoAuto DaysAgo {..} = case daysAgoSign of GT -> if | daysAgoYears > 0 -> unwords [plural daysAgoYears "year" "years", "ago"] | daysAgoMonths > 0 -> unwords [plural daysAgoMonths "month" "months", "ago"] | daysAgoWeeks > 0 -> unwords [plural daysAgoWeeks "week" "weeks", "ago"] | daysAgoDays == 1 -> "yesterday" | daysAgoDays > 0 -> unwords [plural daysAgoDays "day" "days", "ago"] | otherwise -> "today" EQ -> "today" LT -> if | daysAgoYears > 0 -> unwords ["in", plural daysAgoYears "year" "years"] | daysAgoMonths > 0 -> unwords ["in", plural daysAgoMonths "month" "months"] | daysAgoWeeks > 0 -> unwords ["in", plural daysAgoWeeks "week" "weeks"] | daysAgoDays == 1 -> "tomorrow" | daysAgoDays > 0 -> unwords ["in", plural daysAgoDays "day" "days"] | otherwise -> "today" renderTimeAgoAuto :: TimeAgo -> String renderTimeAgoAuto TimeAgo {..} = case timeAgoSign of GT -> if | daysAgoToDays timeAgoDaysAgo == 1 -> "1 day ago" | daysAgoToDays timeAgoDaysAgo > 0 -> renderDaysAgoAuto (timeAgoDaysAgo {daysAgoSign = timeAgoSign}) | timeAgoHours > 0 -> unwords [plural timeAgoHours "hour" "hours", "ago"] | timeAgoMinutes > 0 -> unwords [plural timeAgoMinutes "minute" "minutes", "ago"] | timeAgoSeconds > 0 -> unwords [plural timeAgoSeconds "second" "seconds", "ago"] | otherwise -> "just now" EQ -> "just now" LT -> if | daysAgoToDays timeAgoDaysAgo == 1 -> "in 1 day" | daysAgoToDays timeAgoDaysAgo > 0 -> renderDaysAgoAuto (timeAgoDaysAgo {daysAgoSign = timeAgoSign}) | timeAgoHours > 0 -> unwords ["in", plural timeAgoHours "hour" "hours"] | timeAgoMinutes > 0 -> unwords ["in", plural timeAgoMinutes "minute" "minutes"] | timeAgoSeconds > 0 -> unwords ["in", plural timeAgoSeconds "second" "seconds"] | otherwise -> "just now" plural :: (Show a, Integral a) => a -> String -> String -> String plural 1 sing _ = "1 " ++ sing plural n _ plur = show n ++ " " ++ plur