Skip to content

Commit f9a3fa5

Browse files
committed
fix
1 parent fec6b3d commit f9a3fa5

File tree

8 files changed

+58
-34
lines changed

8 files changed

+58
-34
lines changed

modules/templates/helper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func NewFuncMap() template.FuncMap {
5454
"StringUtils": NewStringUtils,
5555
"SliceUtils": NewSliceUtils,
5656
"JsonUtils": NewJsonUtils,
57-
"DateUtils": NewDateUtils, // TODO: to be replaced by DateUtils
57+
"DateUtils": NewDateUtils,
5858

5959
// -----------------------------------------------------------------
6060
// svg / avatar / icon / color
@@ -71,7 +71,7 @@ func NewFuncMap() template.FuncMap {
7171
"CountFmt": base.FormatNumberSI,
7272
"TimeSince": timeutil.TimeSince,
7373
"TimeSinceUnix": timeutil.TimeSinceUnix,
74-
"DateTime": timeutil.DateTime,
74+
"DateTime": dateTimeLegacy, // for backward compatibility only, do not use it anymore
7575
"Sec2Time": util.SecToTime,
7676
"LoadTimes": func(startTime time.Time) string {
7777
return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms"

modules/templates/util_date.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ package templates
66
import (
77
"context"
88
"html/template"
9+
"time"
910

11+
"code.gitea.io/gitea/modules/setting"
1012
"code.gitea.io/gitea/modules/timeutil"
1113
)
1214

@@ -32,3 +34,27 @@ func (du *DateUtils) AbsoluteLong(time any) template.HTML {
3234
func (du *DateUtils) FullTime(time any) template.HTML {
3335
return timeutil.DateTime("full", time)
3436
}
37+
38+
// ParseLegacy parses the datetime in legacy format, eg: "2016-01-02" in server's timezone.
39+
// It shouldn't be used in new code. New code should use Time or TimeStamp as much as possible.
40+
func (du *DateUtils) ParseLegacy(datetime string) time.Time {
41+
return parseLegacy(datetime)
42+
}
43+
44+
func parseLegacy(datetime string) time.Time {
45+
t, err := time.Parse(time.RFC3339, datetime)
46+
if err != nil {
47+
t, _ = time.ParseInLocation(time.DateOnly, datetime, setting.DefaultUILocation)
48+
}
49+
return t
50+
}
51+
52+
func dateTimeLegacy(format string, datetime any, _ ...string) template.HTML {
53+
if !setting.IsProd || setting.IsInTesting {
54+
panic("dateTimeLegacy is for backward compatibility only, do not use it in new code")
55+
}
56+
if s, ok := datetime.(string); ok {
57+
datetime = parseLegacy(s)
58+
}
59+
return timeutil.DateTime(format, datetime)
60+
}
Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,51 @@
11
// Copyright 2023 The Gitea Authors. All rights reserved.
22
// SPDX-License-Identifier: MIT
33

4-
package timeutil
4+
package templates
55

66
import (
77
"testing"
88
"time"
99

1010
"code.gitea.io/gitea/modules/setting"
1111
"code.gitea.io/gitea/modules/test"
12+
"code.gitea.io/gitea/modules/timeutil"
1213

1314
"github.com/stretchr/testify/assert"
1415
)
1516

1617
func TestDateTime(t *testing.T) {
1718
testTz, _ := time.LoadLocation("America/New_York")
1819
defer test.MockVariableValue(&setting.DefaultUILocation, testTz)()
20+
defer test.MockVariableValue(&setting.IsInTesting, false)()
21+
22+
du := NewDateUtils(nil)
1923

2024
refTimeStr := "2018-01-01T00:00:00Z"
2125
refDateStr := "2018-01-01"
2226
refTime, _ := time.Parse(time.RFC3339, refTimeStr)
23-
refTimeStamp := TimeStamp(refTime.Unix())
27+
refTimeStamp := timeutil.TimeStamp(refTime.Unix())
2428

25-
assert.EqualValues(t, "-", DateTime("short", nil))
26-
assert.EqualValues(t, "-", DateTime("short", 0))
27-
assert.EqualValues(t, "-", DateTime("short", time.Time{}))
28-
assert.EqualValues(t, "-", DateTime("short", TimeStamp(0)))
29+
assert.EqualValues(t, "-", du.AbsoluteShort(nil))
30+
assert.EqualValues(t, "-", du.AbsoluteShort(0))
31+
assert.EqualValues(t, "-", du.AbsoluteShort(time.Time{}))
32+
assert.EqualValues(t, "-", du.AbsoluteShort(timeutil.TimeStamp(0)))
2933

30-
actual := DateTime("short", "invalid")
31-
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="invalid">invalid</absolute-date>`, actual)
34+
actual := dateTimeLegacy("short", "invalid")
35+
assert.EqualValues(t, `-`, actual)
3236

33-
actual = DateTime("short", refTimeStr)
34-
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2018-01-01T00:00:00Z">2018-01-01T00:00:00Z</absolute-date>`, actual)
37+
actual = dateTimeLegacy("short", refTimeStr)
38+
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2018-01-01T00:00:00Z">2018-01-01</absolute-date>`, actual)
3539

36-
actual = DateTime("short", refTime)
40+
actual = du.AbsoluteShort(refTime)
3741
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2018-01-01T00:00:00Z">2018-01-01</absolute-date>`, actual)
3842

39-
actual = DateTime("short", refDateStr)
40-
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2018-01-01">2018-01-01</absolute-date>`, actual)
43+
actual = dateTimeLegacy("short", refDateStr)
44+
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2018-01-01T00:00:00-05:00">2018-01-01</absolute-date>`, actual)
4145

42-
actual = DateTime("short", refTimeStamp)
46+
actual = du.AbsoluteShort(refTimeStamp)
4347
assert.EqualValues(t, `<absolute-date weekday="" year="numeric" month="short" day="numeric" date="2017-12-31T19:00:00-05:00">2017-12-31</absolute-date>`, actual)
4448

45-
actual = DateTime("full", refTimeStamp)
49+
actual = du.FullTime(refTimeStamp)
4650
assert.EqualValues(t, `<relative-time weekday="" year="numeric" format="datetime" month="short" day="numeric" hour="numeric" minute="numeric" second="numeric" data-tooltip-content data-tooltip-interactive="true" datetime="2017-12-31T19:00:00-05:00">2017-12-31 19:00:00 -05:00</relative-time>`, actual)
4751
}

modules/timeutil/datetime.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ import (
1212
)
1313

1414
// DateTime renders an absolute time HTML element by datetime.
15-
func DateTime(format string, datetime any, extraAttrs ...string) template.HTML {
16-
// TODO: remove the extraAttrs argument, it's not used in any call to DateTime
17-
15+
func DateTime(format string, datetime any) template.HTML {
1816
if p, ok := datetime.(*time.Time); ok {
1917
datetime = *p
2018
}
@@ -34,9 +32,6 @@ func DateTime(format string, datetime any, extraAttrs ...string) template.HTML {
3432
switch v := datetime.(type) {
3533
case nil:
3634
return "-"
37-
case string:
38-
datetimeEscaped = html.EscapeString(v)
39-
textEscaped = datetimeEscaped
4035
case time.Time:
4136
if v.IsZero() || v.Unix() == 0 {
4237
return "-"
@@ -51,10 +46,7 @@ func DateTime(format string, datetime any, extraAttrs ...string) template.HTML {
5146
panic(fmt.Sprintf("Unsupported time type %T", datetime))
5247
}
5348

54-
attrs := make([]string, 0, 10+len(extraAttrs))
55-
attrs = append(attrs, extraAttrs...)
56-
attrs = append(attrs, `weekday=""`, `year="numeric"`)
57-
49+
attrs := []string{`weekday=""`, `year="numeric"`}
5850
switch format {
5951
case "short", "long": // date only
6052
attrs = append(attrs, `month="`+format+`"`, `day="numeric"`)

templates/repo/issue/milestone_issues.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
{{if .Milestone.DeadlineString}}
3939
<span{{if .IsOverdue}} class="text red"{{end}}>
4040
{{svg "octicon-calendar"}}
41-
{{DateTime "short" .Milestone.DeadlineString}}
41+
{{ctx.DateUtils.AbsoluteShort (.Milestone.DeadlineString|ctx.DateUtils.ParseLegacy)}}
4242
</span>
4343
{{else}}
4444
{{svg "octicon-calendar"}}

templates/repo/issue/milestones.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
{{if .DeadlineString}}
6060
<span class="flex-text-inline {{if .IsOverdue}}text red{{end}}">
6161
{{svg "octicon-calendar" 14}}
62-
{{DateTime "short" .DeadlineString}}
62+
{{ctx.DateUtils.AbsoluteShort (.DeadlineString|ctx.DateUtils.ParseLegacy)}}
6363
</span>
6464
{{else}}
6565
{{svg "octicon-calendar" 14}}

templates/repo/issue/view_content/comments.tmpl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@
296296
{{template "shared/user/avatarlink" dict "user" .Poster}}
297297
<span class="text grey muted-links">
298298
{{template "shared/user/authorlink" .Poster}}
299-
{{ctx.Locale.Tr "repo.issues.due_date_added" (DateTime "long" .Content) $createdStr}}
299+
{{$dueDate := ctx.DateUtils.AbsoluteLong (.Content|ctx.DateUtils.ParseLegacy)}}
300+
{{ctx.Locale.Tr "repo.issues.due_date_added" $dueDate $createdStr}}
300301
</span>
301302
</div>
302303
{{else if eq .Type 17}}
@@ -307,8 +308,8 @@
307308
{{template "shared/user/authorlink" .Poster}}
308309
{{$parsedDeadline := StringUtils.Split .Content "|"}}
309310
{{if eq (len $parsedDeadline) 2}}
310-
{{$from := DateTime "long" (index $parsedDeadline 1)}}
311-
{{$to := DateTime "long" (index $parsedDeadline 0)}}
311+
{{$to := ctx.DateUtils.AbsoluteLong ((index $parsedDeadline 0)|ctx.DateUtils.ParseLegacy)}}
312+
{{$from := ctx.DateUtils.AbsoluteLong ((index $parsedDeadline 1)|ctx.DateUtils.ParseLegacy)}}
312313
{{ctx.Locale.Tr "repo.issues.due_date_modified" $to $from $createdStr}}
313314
{{end}}
314315
</span>
@@ -319,7 +320,8 @@
319320
{{template "shared/user/avatarlink" dict "user" .Poster}}
320321
<span class="text grey muted-links">
321322
{{template "shared/user/authorlink" .Poster}}
322-
{{ctx.Locale.Tr "repo.issues.due_date_remove" (DateTime "long" .Content) $createdStr}}
323+
{{$dueDate := ctx.DateUtils.AbsoluteLong (.Content|ctx.DateUtils.ParseLegacy)}}
324+
{{ctx.Locale.Tr "repo.issues.due_date_remove" $dueDate $createdStr}}
323325
</span>
324326
</div>
325327
{{else if eq .Type 19}}

templates/user/dashboard/milestones.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
{{if .DeadlineString}}
117117
<span{{if .IsOverdue}} class="text red"{{end}}>
118118
{{svg "octicon-calendar" 14}}
119-
{{DateTime "short" .DeadlineString}}
119+
{{ctx.DateUtils.AbsoluteShort (.DeadlineString|ctx.DateUtils.ParseLegacy)}}
120120
</span>
121121
{{else}}
122122
{{svg "octicon-calendar" 14}}

0 commit comments

Comments
 (0)