summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorYarden Shoham <git@yardenshoham.com>2023-04-23 22:12:33 +0300
committerGitHub <noreply@github.com>2023-04-23 15:12:33 -0400
commit70bb4984cdad9a15d676708bd345b590aa42d72a (patch)
treedda9461e4928839fa08641d68cf1c5bb29252b3d /modules
parentcbe2e99aed5e479b0fae38726e16baefacb1a7f1 (diff)
downloadgitea-70bb4984cdad9a15d676708bd345b590aa42d72a.tar.gz
gitea-70bb4984cdad9a15d676708bd345b590aa42d72a.zip
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 <git@yardenshoham.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'modules')
-rw-r--r--modules/templates/helper.go1
-rw-r--r--modules/timeutil/datetime.go25
2 files changed, 26 insertions, 0 deletions
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(`<relative-time format="datetime" year="numeric" month="short" day="numeric" weekday="" datetime="%s">%s</relative-time>`, datetimeEscaped, fallbackEscaped))
+ case "long":
+ return template.HTML(fmt.Sprintf(`<relative-time format="datetime" year="numeric" month="long" day="numeric" weekday="" datetime="%s">%s</relative-time>`, datetimeEscaped, fallbackEscaped))
+ case "full":
+ return template.HTML(fmt.Sprintf(`<relative-time format="datetime" weekday="" year="numeric" month="short" day="numeric" hour="numeric" minute="numeric" second="numeric" datetime="%s">%s</relative-time>`, datetimeEscaped, fallbackEscaped))
+ }
+ return template.HTML("error in DateTime")
+}