@@ -6,11 +6,9 @@ package timeutil
6
6
import (
7
7
"fmt"
8
8
"html/template"
9
- "math"
10
9
"strings"
11
10
"time"
12
11
13
- "code.gitea.io/gitea/modules/setting"
14
12
"code.gitea.io/gitea/modules/translation"
15
13
)
16
14
@@ -24,10 +22,6 @@ const (
24
22
Year = 12 * Month
25
23
)
26
24
27
- func round (s float64 ) int64 {
28
- return int64 (math .Round (s ))
29
- }
30
-
31
25
func computeTimeDiffFloor (diff int64 , lang translation.Locale ) (int64 , string ) {
32
26
diffStr := ""
33
27
switch {
@@ -86,94 +80,6 @@ func computeTimeDiffFloor(diff int64, lang translation.Locale) (int64, string) {
86
80
return diff , diffStr
87
81
}
88
82
89
- func computeTimeDiff (diff int64 , lang translation.Locale ) (int64 , string ) {
90
- diffStr := ""
91
- switch {
92
- case diff <= 0 :
93
- diff = 0
94
- diffStr = lang .Tr ("tool.now" )
95
- case diff < 2 :
96
- diff = 0
97
- diffStr = lang .Tr ("tool.1s" )
98
- case diff < 1 * Minute :
99
- diffStr = lang .Tr ("tool.seconds" , diff )
100
- diff = 0
101
-
102
- case diff < Minute + Minute / 2 :
103
- diff -= 1 * Minute
104
- diffStr = lang .Tr ("tool.1m" )
105
- case diff < 1 * Hour :
106
- minutes := round (float64 (diff ) / Minute )
107
- if minutes > 1 {
108
- diffStr = lang .Tr ("tool.minutes" , minutes )
109
- } else {
110
- diffStr = lang .Tr ("tool.1m" )
111
- }
112
- diff -= diff / Minute * Minute
113
-
114
- case diff < Hour + Hour / 2 :
115
- diff -= 1 * Hour
116
- diffStr = lang .Tr ("tool.1h" )
117
- case diff < 1 * Day :
118
- hours := round (float64 (diff ) / Hour )
119
- if hours > 1 {
120
- diffStr = lang .Tr ("tool.hours" , hours )
121
- } else {
122
- diffStr = lang .Tr ("tool.1h" )
123
- }
124
- diff -= diff / Hour * Hour
125
-
126
- case diff < Day + Day / 2 :
127
- diff -= 1 * Day
128
- diffStr = lang .Tr ("tool.1d" )
129
- case diff < 1 * Week :
130
- days := round (float64 (diff ) / Day )
131
- if days > 1 {
132
- diffStr = lang .Tr ("tool.days" , days )
133
- } else {
134
- diffStr = lang .Tr ("tool.1d" )
135
- }
136
- diff -= diff / Day * Day
137
-
138
- case diff < Week + Week / 2 :
139
- diff -= 1 * Week
140
- diffStr = lang .Tr ("tool.1w" )
141
- case diff < 1 * Month :
142
- weeks := round (float64 (diff ) / Week )
143
- if weeks > 1 {
144
- diffStr = lang .Tr ("tool.weeks" , weeks )
145
- } else {
146
- diffStr = lang .Tr ("tool.1w" )
147
- }
148
- diff -= diff / Week * Week
149
-
150
- case diff < 1 * Month + Month / 2 :
151
- diff -= 1 * Month
152
- diffStr = lang .Tr ("tool.1mon" )
153
- case diff < 1 * Year :
154
- months := round (float64 (diff ) / Month )
155
- if months > 1 {
156
- diffStr = lang .Tr ("tool.months" , months )
157
- } else {
158
- diffStr = lang .Tr ("tool.1mon" )
159
- }
160
- diff -= diff / Month * Month
161
-
162
- case diff < Year + Year / 2 :
163
- diff -= 1 * Year
164
- diffStr = lang .Tr ("tool.1y" )
165
- default :
166
- years := round (float64 (diff ) / Year )
167
- if years > 1 {
168
- diffStr = lang .Tr ("tool.years" , years )
169
- } else {
170
- diffStr = lang .Tr ("tool.1y" )
171
- }
172
- diff -= (diff / Year ) * Year
173
- }
174
- return diff , diffStr
175
- }
176
-
177
83
// MinutesToFriendly returns a user friendly string with number of minutes
178
84
// converted to hours and minutes.
179
85
func MinutesToFriendly (minutes int , lang translation.Locale ) string {
@@ -208,43 +114,14 @@ func timeSincePro(then, now time.Time, lang translation.Locale) string {
208
114
return strings .TrimPrefix (timeStr , ", " )
209
115
}
210
116
211
- func timeSince (then , now time.Time , lang translation.Locale ) string {
212
- return timeSinceUnix (then .Unix (), now .Unix (), lang )
213
- }
214
-
215
- func timeSinceUnix (then , now int64 , lang translation.Locale ) string {
216
- lbl := "tool.ago"
217
- diff := now - then
218
- if then > now {
219
- lbl = "tool.from_now"
220
- diff = then - now
221
- }
222
- if diff <= 0 {
223
- return lang .Tr ("tool.now" )
224
- }
225
-
226
- _ , diffStr := computeTimeDiff (diff , lang )
227
- return lang .Tr (lbl , diffStr )
228
- }
229
-
230
- // TimeSince calculates the time interval and generate user-friendly string.
117
+ // TimeSince renders relative time HTML given a time.Time
231
118
func TimeSince (then time.Time , lang translation.Locale ) template.HTML {
232
- return htmlTimeSince (then , time .Now (), lang )
119
+ timestamp := then .UTC ().Format (time .RFC3339 )
120
+ // declare data-tooltip-content attribute to switch from "title" tooltip to "tippy" tooltip
121
+ return template .HTML (fmt .Sprintf (`<relative-time class="time-since" prefix="%s" datetime="%s" data-tooltip-content data-tooltip-interactive="true">%s</relative-time>` , lang .Tr ("on_date" ), timestamp , timestamp ))
233
122
}
234
123
235
- func htmlTimeSince (then , now time.Time , lang translation.Locale ) template.HTML {
236
- return template .HTML (fmt .Sprintf (`<span class="time-since" data-tooltip-content="%s" data-tooltip-interactive="true">%s</span>` ,
237
- then .In (setting .DefaultUILocation ).Format (GetTimeFormat (lang .Language ())),
238
- timeSince (then , now , lang )))
239
- }
240
-
241
- // TimeSinceUnix calculates the time interval and generate user-friendly string.
124
+ // TimeSinceUnix renders relative time HTML given a TimeStamp
242
125
func TimeSinceUnix (then TimeStamp , lang translation.Locale ) template.HTML {
243
- return htmlTimeSinceUnix (then , TimeStamp (time .Now ().Unix ()), lang )
244
- }
245
-
246
- func htmlTimeSinceUnix (then , now TimeStamp , lang translation.Locale ) template.HTML {
247
- return template .HTML (fmt .Sprintf (`<span class="time-since" data-tooltip-content="%s" data-tooltip-interactive="true">%s</span>` ,
248
- then .FormatInLocation (GetTimeFormat (lang .Language ()), setting .DefaultUILocation ),
249
- timeSinceUnix (int64 (then ), int64 (now ), lang )))
126
+ return TimeSince (then .AsLocalTime (), lang )
250
127
}
0 commit comments