From 70bb4984cdad9a15d676708bd345b590aa42d72a Mon Sep 17 00:00:00 2001 From: Yarden Shoham Date: Sun, 23 Apr 2023 22:12:33 +0300 Subject: Allow using localized absolute date times within phrases with place holders and localize issue due date events (#24275) This refactors the `shared/datetime/short|long|full` templates into a template helper function, which allows us to render absolute date times within translatable phrases. - Follows #23988 - The first attempt was in #24055 - This should help #22664 Changes: 1. Added the `DateTime` template helper that replaces the `shared/datetime/short|long|full` templates 2. Used find-and-replace with varying regexes to replace the templates from step 1 (for example, `\{\{template "shared/datetime/(\S+) \(dict "Datetime" ([^"]+) "Fallback" ([^\)]+\)?) ?\)?\}\}` -> `{{DateTime "$1 $2 $3}}`) 3. Used the new `DateTime` helper in the issue due date timestamp rendering # Before ![image](https://user-images.githubusercontent.com/20454870/233791256-b454c455-aca0-4b76-b300-7866c7bd529e.png) # After ![image](https://user-images.githubusercontent.com/20454870/233790809-c4913355-2822-4657-bb29-2298deb6d4b3.png) --------- Signed-off-by: Yarden Shoham Co-authored-by: wxiaoguang --- modules/templates/helper.go | 1 + modules/timeutil/datetime.go | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 modules/timeutil/datetime.go (limited to 'modules') diff --git a/modules/templates/helper.go b/modules/templates/helper.go index c82f88a42f..b7bef20560 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -139,6 +139,7 @@ func NewFuncMap() []template.FuncMap { "CountFmt": base.FormatNumberSI, "TimeSince": timeutil.TimeSince, "TimeSinceUnix": timeutil.TimeSinceUnix, + "DateTime": timeutil.DateTime, "Sec2Time": util.SecToTime, "DateFmtLong": func(t time.Time) string { return t.Format(time.RFC3339) diff --git a/modules/timeutil/datetime.go b/modules/timeutil/datetime.go new file mode 100644 index 0000000000..02275bca0c --- /dev/null +++ b/modules/timeutil/datetime.go @@ -0,0 +1,25 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package timeutil + +import ( + "fmt" + "html" + "html/template" +) + +// DateTime renders an absolute time HTML given a time as a string +func DateTime(format, datetime, fallback string) template.HTML { + datetimeEscaped := html.EscapeString(datetime) + fallbackEscaped := html.EscapeString(fallback) + switch format { + case "short": + return template.HTML(fmt.Sprintf(`%s`, datetimeEscaped, fallbackEscaped)) + case "long": + return template.HTML(fmt.Sprintf(`%s`, datetimeEscaped, fallbackEscaped)) + case "full": + return template.HTML(fmt.Sprintf(`%s`, datetimeEscaped, fallbackEscaped)) + } + return template.HTML("error in DateTime") +} -- cgit v1.2.3