tangled
alpha
login
or
join now
uncenter.dev
/
core
forked from
tangled.org/core
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
Compare changes
Choose any two refs to compare.
base:
test-markdown-rendering
master
feat/pic-handle-profile-dropdown
feat/datetime-on-hover
v1.6.0-alpha
v1.5.0-alpha
v1.4.0-alpha
v1.3.0-alpha
v1.2.2-alpha
v1.2.1-alpha
v1.2.0-alpha
v1.1.2-alpha
v1.1.1-alpha
v1.1.0-alpha
v1.0.6-alpha
v1.0.5-alpha
v1.0.4-alpha
v1.0.3-alpha
v1.0.2-alpha
v1.0.1-alpha
v1.0.0-alpha
compare:
test-markdown-rendering
master
feat/pic-handle-profile-dropdown
feat/datetime-on-hover
v1.6.0-alpha
v1.5.0-alpha
v1.4.0-alpha
v1.3.0-alpha
v1.2.2-alpha
v1.2.1-alpha
v1.2.0-alpha
v1.1.2-alpha
v1.1.1-alpha
v1.1.0-alpha
v1.0.6-alpha
v1.0.5-alpha
v1.0.4-alpha
v1.0.3-alpha
v1.0.2-alpha
v1.0.1-alpha
v1.0.0-alpha
go
+197
-174
31 changed files
expand all
collapse all
unified
split
appview
pages
funcmap.go
pages.go
templates
knot.html
knots.html
layouts
topbar.html
repo
branches.html
commit.html
compare
new.html
empty.html
fragments
artifact.html
time.html
index.html
issues
fragments
editIssueComment.html
issueComment.html
issue.html
issues.html
log.html
pipelines
fragments
tooltip.html
pipelines.html
workflow.html
pulls
fragments
pullHeader.html
pullNewComment.html
pull.html
pulls.html
tags.html
tree.html
settings.html
spindles
fragments
spindleListing.html
timeline.html
user
fragments
picHandle.html
picHandleLink.html
+44
-27
appview/pages/funcmap.go
···
105
105
s = append(s, values...)
106
106
return s
107
107
},
108
108
-
"timeFmt": humanize.Time,
109
109
-
"longTimeFmt": func(t time.Time) string {
110
110
-
return t.Format("2006-01-02 * 3:04 PM")
111
111
-
},
112
112
-
"commaFmt": humanize.Comma,
113
113
-
"shortTimeFmt": func(t time.Time) string {
108
108
+
"commaFmt": humanize.Comma,
109
109
+
"relTimeFmt": humanize.Time,
110
110
+
"shortRelTimeFmt": func(t time.Time) string {
114
111
return humanize.CustomRelTime(t, time.Now(), "", "", []humanize.RelTimeMagnitude{
115
112
{time.Second, "now", time.Second},
116
113
{2 * time.Second, "1s %s", 1},
···
129
126
{math.MaxInt64, "a long while %s", 1},
130
127
})
131
128
},
132
132
-
"durationFmt": func(duration time.Duration) string {
129
129
+
"longTimeFmt": func(t time.Time) string {
130
130
+
return t.Format("Jan 2, 2006, 3:04 PM MST")
131
131
+
},
132
132
+
"iso8601DateTimeFmt": func(t time.Time) string {
133
133
+
return t.Format("2006-01-02T15:04:05-07:00")
134
134
+
},
135
135
+
"iso8601DurationFmt": func(duration time.Duration) string {
133
136
days := int64(duration.Hours() / 24)
134
137
hours := int64(math.Mod(duration.Hours(), 24))
135
138
minutes := int64(math.Mod(duration.Minutes(), 60))
136
139
seconds := int64(math.Mod(duration.Seconds(), 60))
137
137
-
138
138
-
chunks := []struct {
139
139
-
name string
140
140
-
amount int64
141
141
-
}{
142
142
-
{"d", days},
143
143
-
{"hr", hours},
144
144
-
{"min", minutes},
145
145
-
{"s", seconds},
146
146
-
}
147
147
-
148
148
-
parts := []string{}
149
149
-
150
150
-
for _, chunk := range chunks {
151
151
-
if chunk.amount != 0 {
152
152
-
parts = append(parts, fmt.Sprintf("%d%s", chunk.amount, chunk.name))
153
153
-
}
154
154
-
}
155
155
-
156
156
-
return strings.Join(parts, " ")
140
140
+
return fmt.Sprintf("P%dD%dH%dM%dS", days, hours, minutes, seconds)
141
141
+
},
142
142
+
"durationFmt": func(duration time.Duration) string {
143
143
+
return durationFmt(duration, [4]string{"d", "hr", "min", "s"})
144
144
+
},
145
145
+
"longDurationFmt": func(duration time.Duration) string {
146
146
+
return durationFmt(duration, [4]string{"days", "hours", "minutes", "seconds"})
157
147
},
158
148
"byteFmt": humanize.Bytes,
159
149
"length": func(slice any) int {
···
288
278
modifiedSVG := svgStr[:svgTagEnd] + classTag + svgStr[svgTagEnd:]
289
279
return template.HTML(modifiedSVG), nil
290
280
}
281
281
+
282
282
+
func durationFmt(duration time.Duration, names [4]string) string {
283
283
+
days := int64(duration.Hours() / 24)
284
284
+
hours := int64(math.Mod(duration.Hours(), 24))
285
285
+
minutes := int64(math.Mod(duration.Minutes(), 60))
286
286
+
seconds := int64(math.Mod(duration.Seconds(), 60))
287
287
+
288
288
+
chunks := []struct {
289
289
+
name string
290
290
+
amount int64
291
291
+
}{
292
292
+
{names[0], days},
293
293
+
{names[1], hours},
294
294
+
{names[2], minutes},
295
295
+
{names[3], seconds},
296
296
+
}
297
297
+
298
298
+
parts := []string{}
299
299
+
300
300
+
for _, chunk := range chunks {
301
301
+
if chunk.amount != 0 {
302
302
+
parts = append(parts, fmt.Sprintf("%d%s", chunk.amount, chunk.name))
303
303
+
}
304
304
+
}
305
305
+
306
306
+
return strings.Join(parts, " ")
307
307
+
}
+20
-18
appview/pages/pages.go
···
691
691
DidHandleMap map[string]string
692
692
693
693
OrderedReactionKinds []db.ReactionKind
694
694
-
Reactions map[db.ReactionKind]int
695
695
-
UserReacted map[db.ReactionKind]bool
694
694
+
Reactions map[db.ReactionKind]int
695
695
+
UserReacted map[db.ReactionKind]bool
696
696
697
697
State string
698
698
}
699
699
700
700
type ThreadReactionFragmentParams struct {
701
701
ThreadAt syntax.ATURI
702
702
-
Kind db.ReactionKind
703
703
-
Count int
702
702
+
Kind db.ReactionKind
703
703
+
Count int
704
704
IsReacted bool
705
705
}
706
706
···
825
825
}
826
826
827
827
type RepoPullPatchParams struct {
828
828
-
LoggedInUser *oauth.User
829
829
-
DidHandleMap map[string]string
830
830
-
RepoInfo repoinfo.RepoInfo
831
831
-
Pull *db.Pull
832
832
-
Stack db.Stack
833
833
-
Diff *types.NiceDiff
834
834
-
Round int
835
835
-
Submission *db.PullSubmission
828
828
+
LoggedInUser *oauth.User
829
829
+
DidHandleMap map[string]string
830
830
+
RepoInfo repoinfo.RepoInfo
831
831
+
Pull *db.Pull
832
832
+
Stack db.Stack
833
833
+
Diff *types.NiceDiff
834
834
+
Round int
835
835
+
Submission *db.PullSubmission
836
836
+
OrderedReactionKinds []db.ReactionKind
836
837
}
837
838
838
839
// this name is a mouthful
···
841
842
}
842
843
843
844
type RepoPullInterdiffParams struct {
844
844
-
LoggedInUser *oauth.User
845
845
-
DidHandleMap map[string]string
846
846
-
RepoInfo repoinfo.RepoInfo
847
847
-
Pull *db.Pull
848
848
-
Round int
849
849
-
Interdiff *patchutil.InterdiffResult
845
845
+
LoggedInUser *oauth.User
846
846
+
DidHandleMap map[string]string
847
847
+
RepoInfo repoinfo.RepoInfo
848
848
+
Pull *db.Pull
849
849
+
Round int
850
850
+
Interdiff *patchutil.InterdiffResult
851
851
+
OrderedReactionKinds []db.ReactionKind
850
852
}
851
853
852
854
// this name is a mouthful
+2
-2
appview/pages/templates/knot.html
···
26
26
</dd>
27
27
28
28
<dt class="font-bold">opened</dt>
29
29
-
<dd>{{ .Registration.Created | timeFmt }}</dd>
29
29
+
<dd>{{ template "repo/fragments/time" .Registration.Created }}</dd>
30
30
31
31
{{ if .Registration.Registered }}
32
32
<dt class="font-bold">registered</dt>
33
33
-
<dd>{{ .Registration.Registered | timeFmt }}</dd>
33
33
+
<dd>{{ template "repo/fragments/time" .Registration.Registered }}</dd>
34
34
{{ else }}
35
35
<dt class="font-bold">status</dt>
36
36
<dd class="text-yellow-800 dark:text-yellow-200 bg-yellow-100 dark:bg-yellow-900 rounded px-2 py-1 inline-block">
+2
-2
appview/pages/templates/knots.html
···
44
44
</a>
45
45
</div>
46
46
<p class="text-sm text-gray-500 dark:text-gray-400">owned by {{ .ByDid }}</p>
47
47
-
<p class="text-sm text-gray-500 dark:text-gray-400">registered {{ .Registered | timeFmt }}</p>
47
47
+
<p class="text-sm text-gray-500 dark:text-gray-400">registered {{ template "repo/fragments/time" .Registered }}</p>
48
48
</div>
49
49
</div>
50
50
{{ end }}
···
70
70
</div>
71
71
</div>
72
72
<p class="text-sm text-gray-500 dark:text-gray-400">opened by {{ .ByDid }}</p>
73
73
-
<p class="text-sm text-gray-500 dark:text-gray-400">created {{ .Created | timeFmt }}</p>
73
73
+
<p class="text-sm text-gray-500 dark:text-gray-400">created {{ template "repo/fragments/time" .Created }}</p>
74
74
</div>
75
75
<div class="flex gap-2 items-center">
76
76
<button
+4
-3
appview/pages/templates/layouts/topbar.html
···
36
36
{{ define "dropDown" }}
37
37
<details class="relative inline-block text-left">
38
38
<summary
39
39
-
class="cursor-pointer list-none"
39
39
+
class="cursor-pointer list-none flex items-center"
40
40
>
41
41
-
{{ didOrHandle .Did .Handle }}
41
41
+
{{ $user := didOrHandle .Did .Handle }}
42
42
+
{{ template "user/fragments/picHandleLink" $user }}
42
43
</summary>
43
44
<div
44
45
class="absolute flex flex-col right-0 mt-4 p-4 rounded w-48 bg-white dark:bg-gray-800 dark:text-white border border-gray-200 dark:border-gray-700"
45
46
>
46
46
-
<a href="/{{ didOrHandle .Did .Handle }}">profile</a>
47
47
+
<a href="/{{ $user }}">profile</a>
47
48
<a href="/knots">knots</a>
48
49
<a href="/spindles">spindles</a>
49
50
<a href="/settings">settings</a>
+2
-2
appview/pages/templates/repo/branches.html
···
59
59
</td>
60
60
<td class="py-3 whitespace-nowrap text-gray-500 dark:text-gray-400">
61
61
{{ if .Commit }}
62
62
-
{{ .Commit.Committer.When | timeFmt }}
62
62
+
{{ template "repo/fragments/time" .Commit.Committer.When }}
63
63
{{ end }}
64
64
</td>
65
65
</tr>
···
98
98
</a>
99
99
</span>
100
100
<div class="inline-block px-1 select-none after:content-['ยท']"></div>
101
101
-
<span>{{ .Commit.Committer.When | timeFmt }}</span>
101
101
+
{{ template "repo/fragments/time" .Commit.Committer.When }}
102
102
</div>
103
103
{{ end }}
104
104
</div>
+2
-2
appview/pages/templates/repo/commit.html
···
34
34
<a href="mailto:{{ $commit.Author.Email }}" class="no-underline hover:underline text-gray-500 dark:text-gray-300">{{ $commit.Author.Name }}</a>
35
35
{{ end }}
36
36
<span class="px-1 select-none before:content-['\00B7']"></span>
37
37
-
{{ timeFmt $commit.Author.When }}
37
37
+
{{ template "repo/fragments/time" $commit.Author.When }}
38
38
<span class="px-1 select-none before:content-['\00B7']"></span>
39
39
</p>
40
40
···
59
59
<div class="flex items-center gap-2 my-2">
60
60
{{ i "user" "w-4 h-4" }}
61
61
{{ $committerDidOrHandle := index $.EmailToDidOrHandle $commit.Committer.Email }}
62
62
-
<a href="/{{ $committerDidOrHandle }}">{{ $committerDidOrHandle }}</a>
62
62
+
<a href="/{{ $committerDidOrHandle }}">{{ template "user/fragments/picHandleLink" $committerDidOrHandle }}</a>
63
63
</div>
64
64
<div class="my-1 pt-2 text-xs border-t">
65
65
<div class="text-gray-600 dark:text-gray-300">SSH Key Fingerprint:</div>
+1
-1
appview/pages/templates/repo/compare/new.html
···
19
19
<a href="/{{ $.RepoInfo.FullName }}/compare?head={{ $br.Name | urlquery }}" class="no-underline hover:no-underline">
20
20
<div class="flex items-center justify-between p-2">
21
21
{{ $br.Name }}
22
22
-
<time class="text-gray-500 dark:text-gray-400">{{ timeFmt $br.Commit.Committer.When }}</time>
22
22
+
<span class="text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" $br.Commit.Committer.When }}</span>
23
23
</div>
24
24
</a>
25
25
{{ end }}
+1
-1
appview/pages/templates/repo/empty.html
···
17
17
<a href="/{{ $.RepoInfo.FullName }}/tree/{{$br.Name | urlquery }}" class="no-underline hover:no-underline">
18
18
<div class="flex items-center justify-between p-2">
19
19
{{ $br.Name }}
20
20
-
<time class="text-gray-500 dark:text-gray-400">{{ timeFmt $br.Commit.Committer.When }}</time>
20
20
+
<span class="text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" $br.Commit.Committer.When }}</span>
21
21
</div>
22
22
</a>
23
23
{{ end }}
+2
-2
appview/pages/templates/repo/fragments/artifact.html
···
10
10
</div>
11
11
12
12
<div id="right-side" class="text-gray-500 dark:text-gray-400 flex items-center flex-shrink-0 gap-2 text-sm">
13
13
-
<span title="{{ longTimeFmt .Artifact.CreatedAt }}" class="hidden md:inline">{{ timeFmt .Artifact.CreatedAt }}</span>
14
14
-
<span title="{{ longTimeFmt .Artifact.CreatedAt }}" class=" md:hidden">{{ shortTimeFmt .Artifact.CreatedAt }}</span>
13
13
+
<span class="hidden md:inline">{{ template "repo/fragments/time" .Artifact.CreatedAt }}</span>
14
14
+
<span class=" md:hidden">{{ template "repo/fragments/shortTime" .Artifact.CreatedAt }}</span>
15
15
16
16
<span class="select-none after:content-['ยท'] hidden md:inline"></span>
17
17
<span class="truncate max-w-[100px] hidden md:inline">{{ .Artifact.MimeType }}</span>
+19
appview/pages/templates/repo/fragments/time.html
···
1
1
+
{{ define "repo/fragments/timeWrapper" }}
2
2
+
<time datetime="{{ .Time | iso8601DateTimeFmt }}" title="{{ .Time | longTimeFmt }}">{{ .Content }}</time>
3
3
+
{{ end }}
4
4
+
5
5
+
{{ define "repo/fragments/time" }}
6
6
+
{{ template "repo/fragments/timeWrapper" (dict "Time" . "Content" (. | relTimeFmt)) }}
7
7
+
{{ end }}
8
8
+
9
9
+
{{ define "repo/fragments/shortTime" }}
10
10
+
{{ template "repo/fragments/timeWrapper" (dict "Time" . "Content" (. | shortRelTimeFmt)) }}
11
11
+
{{ end }}
12
12
+
13
13
+
{{ define "repo/fragments/shortTimeAgo" }}
14
14
+
{{ template "repo/fragments/timeWrapper" (dict "Time" . "Content" (print (. | shortRelTimeFmt) " ago")) }}
15
15
+
{{ end }}
16
16
+
17
17
+
{{ define "repo/fragments/duration" }}
18
18
+
<time datetime="{{ . | iso8601DurationFmt }}" title="{{ . | longDurationFmt }}">{{ . | durationFmt }}</time>
19
19
+
{{ end }}
+6
-10
appview/pages/templates/repo/index.html
···
149
149
</a>
150
150
151
151
{{ if .LastCommit }}
152
152
-
<time class="text-xs text-gray-500 dark:text-gray-400"
153
153
-
>{{ timeFmt .LastCommit.When }}</time
154
154
-
>
152
152
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .LastCommit.When }}</span>
155
153
{{ end }}
156
154
</div>
157
155
</div>
···
172
170
</a>
173
171
174
172
{{ if .LastCommit }}
175
175
-
<time class="text-xs text-gray-500 dark:text-gray-400"
176
176
-
>{{ timeFmt .LastCommit.When }}</time
177
177
-
>
173
173
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .LastCommit.When }}</span>
178
174
{{ end }}
179
175
</div>
180
176
</div>
···
266
262
{{ end }}"
267
263
class="text-gray-500 dark:text-gray-400 no-underline hover:underline"
268
264
>{{ if $didOrHandle }}
269
269
-
{{ $didOrHandle }}
265
265
+
{{ template "user/fragments/picHandleLink" $didOrHandle }}
270
266
{{ else }}
271
267
{{ .Author.Name }}
272
268
{{ end }}</a
273
269
>
274
270
</span>
275
271
<div class="inline-block px-1 select-none after:content-['ยท']"></div>
276
276
-
<span>{{ timeFmt .Committer.When }}</span>
272
272
+
{{ template "repo/fragments/time" .Committer.When }}
277
273
278
274
<!-- tags/branches -->
279
275
{{ $tagsForCommit := index $.TagMap .Hash.String }}
···
320
316
</a>
321
317
{{ if .Commit }}
322
318
<span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['ยท']"></span>
323
323
-
<time class="text-xs text-gray-500 dark:text-gray-400">{{ timeFmt .Commit.Committer.When }}</time>
319
319
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .Commit.Committer.When }}</span>
324
320
{{ end }}
325
321
{{ if .IsDefault }}
326
322
<span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['ยท']"></span>
···
366
362
</div>
367
363
<div>
368
364
{{ with .Tag }}
369
369
-
<time class="text-xs text-gray-500 dark:text-gray-400">{{ timeFmt .Tagger.When }}</time>
365
365
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .Tagger.When }}</span>
370
366
{{ end }}
371
367
{{ if eq $idx 0 }}
372
368
{{ with .Tag }}<span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['ยท']"></span>{{ end }}
+1
-1
appview/pages/templates/repo/issues/fragments/editIssueComment.html
···
19
19
href="#{{ .CommentId }}"
20
20
class="text-gray-500 hover:text-gray-500 hover:underline no-underline"
21
21
id="{{ .CommentId }}">
22
22
-
{{ .Created | timeFmt }}
22
22
+
{{ template "repo/fragments/time" .Created }}
23
23
</a>
24
24
25
25
<button
+9
-9
appview/pages/templates/repo/issues/fragments/issueComment.html
···
1
1
{{ define "repo/issues/fragments/issueComment" }}
2
2
{{ with .Comment }}
3
3
<div id="comment-container-{{.CommentId}}">
4
4
-
<div class="flex items-center gap-2 mb-2 text-gray-500 dark:text-gray-400 text-sm">
4
4
+
<div class="flex items-center gap-2 mb-2 text-gray-500 dark:text-gray-400 text-sm flex-wrap">
5
5
{{ $owner := index $.DidHandleMap .OwnerDid }}
6
6
-
<a href="/{{ $owner }}" class="no-underline hover:underline">{{ $owner }}</a>
6
6
+
{{ template "user/fragments/picHandleLink" $owner }}
7
7
8
8
<span class="before:content-['ยท']"></span>
9
9
<a
···
11
11
class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-400 hover:underline no-underline"
12
12
id="{{ .CommentId }}">
13
13
{{ if .Deleted }}
14
14
-
deleted {{ .Deleted | timeFmt }}
14
14
+
deleted {{ template "repo/fragments/time" .Deleted }}
15
15
{{ else if .Edited }}
16
16
-
edited {{ .Edited | timeFmt }}
16
16
+
edited {{ template "repo/fragments/time" .Edited }}
17
17
{{ else }}
18
18
-
{{ .Created | timeFmt }}
18
18
+
{{ template "repo/fragments/time" .Created }}
19
19
{{ end }}
20
20
</a>
21
21
-
21
21
+
22
22
<!-- show user "hats" -->
23
23
{{ $isIssueAuthor := eq .OwnerDid $.Issue.OwnerDid }}
24
24
{{ if $isIssueAuthor }}
···
29
29
30
30
{{ $isCommentOwner := and $.LoggedInUser (eq $.LoggedInUser.Did .OwnerDid) }}
31
31
{{ if and $isCommentOwner (not .Deleted) }}
32
32
-
<button
33
33
-
class="btn px-2 py-1 text-sm"
32
32
+
<button
33
33
+
class="btn px-2 py-1 text-sm"
34
34
hx-get="/{{ $.RepoInfo.FullName }}/issues/{{ .Issue }}/comment/{{ .CommentId }}/edit"
35
35
hx-swap="outerHTML"
36
36
hx-target="#comment-container-{{.CommentId}}"
37
37
>
38
38
{{ i "pencil" "w-4 h-4" }}
39
39
</button>
40
40
-
<button
40
40
+
<button
41
41
class="btn px-2 py-1 text-sm text-red-500 flex gap-2 items-center group"
42
42
hx-delete="/{{ $.RepoInfo.FullName }}/issues/{{ .Issue }}/comment/{{ .CommentId }}/"
43
43
hx-confirm="Are you sure you want to delete your comment?"
+3
-5
appview/pages/templates/repo/issues/issue.html
···
33
33
<span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1">
34
34
opened by
35
35
{{ $owner := didOrHandle .Issue.OwnerDid .IssueOwnerHandle }}
36
36
-
{{ template "user/fragments/picHandle" $owner }}
36
36
+
{{ template "user/fragments/picHandleLink" $owner }}
37
37
<span class="select-none before:content-['\00B7']"></span>
38
38
-
<time title="{{ .Issue.Created | longTimeFmt }}">
39
39
-
{{ .Issue.Created | timeFmt }}
40
40
-
</time>
38
38
+
{{ template "repo/fragments/time" .Issue.Created }}
41
39
</span>
42
40
</div>
43
41
···
90
88
>
91
89
<div class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-4 px-4 relative w-full md:w-3/5">
92
90
<div class="text-sm pb-2 text-gray-500 dark:text-gray-400">
93
93
-
{{ didOrHandle .LoggedInUser.Did .LoggedInUser.Handle }}
91
91
+
{{ template "user/fragments/picHandleLink" (didOrHandle .LoggedInUser.Did .LoggedInUser.Handle) }}
94
92
</div>
95
93
<textarea
96
94
id="comment-textarea"
+2
-4
appview/pages/templates/repo/issues/issues.html
···
66
66
67
67
<span class="ml-1">
68
68
{{ $owner := index $.DidHandleMap .OwnerDid }}
69
69
-
{{ template "user/fragments/picHandle" $owner }}
69
69
+
{{ template "user/fragments/picHandleLink" $owner }}
70
70
</span>
71
71
72
72
<span class="before:content-['ยท']">
73
73
-
<time>
74
74
-
{{ .Created | timeFmt }}
75
75
-
</time>
73
73
+
{{ template "repo/fragments/time" .Created }}
76
74
</span>
77
75
78
76
<span class="before:content-['ยท']">
+4
-4
appview/pages/templates/repo/log.html
···
31
31
<td class=" py-3 align-top">
32
32
{{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }}
33
33
{{ if $didOrHandle }}
34
34
-
<a href="/{{ $didOrHandle }}" class="text-gray-700 dark:text-gray-300 no-underline hover:underline">{{ $didOrHandle }}</a>
34
34
+
{{ template "user/fragments/picHandleLink" $didOrHandle }}
35
35
{{ else }}
36
36
<a href="mailto:{{ $commit.Author.Email }}" class="text-gray-700 dark:text-gray-300 no-underline hover:underline">{{ $commit.Author.Name }}</a>
37
37
{{ end }}
···
87
87
{{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "Pipeline" $pipeline "RepoInfo" $.RepoInfo) }}
88
88
{{ end }}
89
89
</td>
90
90
-
<td class=" py-3 align-top text-gray-500 dark:text-gray-400">{{ timeFmt $commit.Committer.When }}</td>
90
90
+
<td class=" py-3 align-top text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" $commit.Committer.When }}</td>
91
91
</tr>
92
92
{{ end }}
93
93
</tbody>
···
159
159
{{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }}
160
160
<a href="{{ if $didOrHandle }}/{{ $didOrHandle }}{{ else }}mailto:{{ $commit.Author.Email }}{{ end }}"
161
161
class="text-gray-500 dark:text-gray-400 no-underline hover:underline">
162
162
-
{{ if $didOrHandle }}{{ $didOrHandle }}{{ else }}{{ $commit.Author.Name }}{{ end }}
162
162
+
{{ if $didOrHandle }}{{ template "user/fragments/picHandleLink" $didOrHandle }}{{ else }}{{ $commit.Author.Name }}{{ end }}
163
163
</a>
164
164
</span>
165
165
<div class="inline-block px-1 select-none after:content-['ยท']"></div>
166
166
-
<span>{{ shortTimeFmt $commit.Committer.When }}</span>
166
166
+
<span>{{ template "repo/fragments/shortTime" $commit.Committer.When }}</span>
167
167
168
168
<!-- ci status -->
169
169
{{ $pipeline := index $.Pipelines .Hash.String }}
+5
-9
appview/pages/templates/repo/pipelines/fragments/tooltip.html
···
10
10
{{ $lastStatus := $all.Latest }}
11
11
{{ $kind := $lastStatus.Status.String }}
12
12
13
13
-
{{ $t := .TimeTaken }}
14
14
-
{{ $time := "" }}
15
15
-
{{ if $t }}
16
16
-
{{ $time = durationFmt $t }}
17
17
-
{{ else }}
18
18
-
{{ $time = printf "%s ago" (shortTimeFmt $pipeline.Created) }}
19
19
-
{{ end }}
20
20
-
21
13
<div id="left" class="flex items-center gap-2 flex-shrink-0">
22
14
{{ template "repo/pipelines/fragments/workflowSymbol" $all }}
23
15
{{ $name }}
24
16
</div>
25
17
<div id="right" class="flex items-center gap-2 flex-shrink-0">
26
18
<span class="font-bold">{{ $kind }}</span>
27
27
-
<time>{{ $time }}</time>
19
19
+
{{ if .TimeTaken }}
20
20
+
{{ template "repo/fragments/duration" .TimeTaken }}
21
21
+
{{ else }}
22
22
+
{{ template "repo/fragments/shortTimeAgo" $pipeline.Created }}
23
23
+
{{ end }}
28
24
</div>
29
25
</div>
30
26
</a>
+1
-3
appview/pages/templates/repo/pipelines/pipelines.html
···
74
74
</div>
75
75
76
76
<div class="text-sm md:text-base col-span-1 text-right">
77
77
-
<time title="{{ .Created | longTimeFmt }}">
78
78
-
{{ .Created | shortTimeFmt }} ago
79
79
-
</time>
77
77
+
{{ template "repo/fragments/shortTimeAgo" .Created }}
80
78
</div>
81
79
82
80
{{ $t := .TimeTaken }}
+5
-10
appview/pages/templates/repo/pipelines/workflow.html
···
32
32
{{ $lastStatus := $all.Latest }}
33
33
{{ $kind := $lastStatus.Status.String }}
34
34
35
35
-
{{ $t := .TimeTaken }}
36
36
-
{{ $time := "" }}
37
37
-
38
38
-
{{ if $t }}
39
39
-
{{ $time = durationFmt $t }}
40
40
-
{{ else }}
41
41
-
{{ $time = printf "%s ago" (shortTimeFmt $lastStatus.Created) }}
42
42
-
{{ end }}
43
43
-
44
35
<div id="left" class="flex items-center gap-2 flex-shrink-0">
45
36
{{ template "repo/pipelines/fragments/workflowSymbol" $all }}
46
37
{{ $name }}
47
38
</div>
48
39
<div id="right" class="flex items-center gap-2 flex-shrink-0">
49
40
<span class="font-bold">{{ $kind }}</span>
50
50
-
<time>{{ $time }}</time>
41
41
+
{{ if .TimeTaken }}
42
42
+
{{ template "repo/fragments/duration" .TimeTaken }}
43
43
+
{{ else }}
44
44
+
{{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }}
45
45
+
{{ end }}
51
46
</div>
52
47
</div>
53
48
</a>
+6
-4
appview/pages/templates/repo/pulls/fragments/pullHeader.html
···
29
29
<span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1">
30
30
opened by
31
31
{{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
32
32
-
{{ template "user/fragments/picHandle" $owner }}
32
32
+
{{ template "user/fragments/picHandleLink" $owner }}
33
33
<span class="select-none before:content-['\00B7']"></span>
34
34
-
<time>{{ .Pull.Created | timeFmt }}</time>
34
34
+
{{ template "repo/fragments/time" .Pull.Created }}
35
35
36
36
<span class="select-none before:content-['\00B7']"></span>
37
37
<span>
···
62
62
</article>
63
63
{{ end }}
64
64
65
65
+
{{ with .OrderedReactionKinds }}
65
66
<div class="flex items-center gap-2 mt-2">
66
66
-
{{ template "repo/fragments/reactionsPopUp" .OrderedReactionKinds }}
67
67
-
{{ range $kind := .OrderedReactionKinds }}
67
67
+
{{ template "repo/fragments/reactionsPopUp" . }}
68
68
+
{{ range $kind := . }}
68
69
{{
69
70
template "repo/fragments/reaction"
70
71
(dict
···
75
76
}}
76
77
{{ end }}
77
78
</div>
79
79
+
{{ end }}
78
80
</section>
79
81
80
82
+3
-4
appview/pages/templates/repo/pulls/fragments/pullNewComment.html
···
1
1
{{ define "repo/pulls/fragments/pullNewComment" }}
2
2
-
<div
3
3
-
id="pull-comment-card-{{ .RoundNumber }}"
2
2
+
<div
3
3
+
id="pull-comment-card-{{ .RoundNumber }}"
4
4
class="bg-white dark:bg-gray-800 rounded drop-shadow-sm p-4 relative w-full flex flex-col gap-2">
5
5
<div class="text-sm text-gray-500 dark:text-gray-400">
6
6
-
{{ didOrHandle .LoggedInUser.Did .LoggedInUser.Handle }}
6
6
+
{{ template "user/fragments/picHandleLink" (didOrHandle .LoggedInUser.Did .LoggedInUser.Handle) }}
7
7
</div>
8
8
<form
9
9
hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/round/{{ .RoundNumber }}/comment"
···
38
38
</form>
39
39
</div>
40
40
{{ end }}
41
41
-
+14
-19
appview/pages/templates/repo/pulls/pull.html
···
5
5
{{ define "extrameta" }}
6
6
{{ $title := printf "%s · pull #%d · %s" .Pull.Title .Pull.PullId .RepoInfo.FullName }}
7
7
{{ $url := printf "https://tangled.sh/%s/pulls/%d" .RepoInfo.FullName .Pull.PullId }}
8
8
-
8
8
+
9
9
{{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo "Title" $title "Url" $url) }}
10
10
{{ end }}
11
11
···
46
46
</div>
47
47
<!-- round summary -->
48
48
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
49
49
-
<span>
49
49
+
<span class="gap-1 flex items-center">
50
50
{{ $owner := index $.DidHandleMap $.Pull.OwnerDid }}
51
51
{{ $re := "re" }}
52
52
{{ if eq .RoundNumber 0 }}
53
53
{{ $re = "" }}
54
54
{{ end }}
55
55
<span class="hidden md:inline">{{$re}}submitted</span>
56
56
-
by <a href="/{{ $owner }}">{{ $owner }}</a>
56
56
+
by {{ template "user/fragments/picHandleLink" $owner }}
57
57
<span class="select-none before:content-['\00B7']"></span>
58
58
-
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}"><time>{{ .Created | shortTimeFmt }}</time></a>
58
58
+
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a>
59
59
<span class="select-none before:content-['ยท']"></span>
60
60
{{ $s := "s" }}
61
61
{{ if eq (len .Comments) 1 }}
···
68
68
<a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group"
69
69
hx-boost="true"
70
70
href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}">
71
71
-
{{ i "file-diff" "w-4 h-4" }}
71
71
+
{{ i "file-diff" "w-4 h-4" }}
72
72
<span class="hidden md:inline">diff</span>
73
73
{{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
74
74
</a>
···
150
150
{{ if gt $cidx 0 }}
151
151
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
152
152
{{ end }}
153
153
-
<div class="text-sm text-gray-500 dark:text-gray-400">
154
154
-
{{ $owner := index $.DidHandleMap $c.OwnerDid }}
155
155
-
<a href="/{{$owner}}">{{$owner}}</a>
153
153
+
<div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1">
154
154
+
{{ $owner := index $.DidHandleMap $c.OwnerDid }}
155
155
+
{{ template "user/fragments/picHandleLink" $owner }}
156
156
<span class="before:content-['ยท']"></span>
157
157
-
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}"><time>{{ $c.Created | shortTimeFmt }}</time></a>
157
157
+
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a>
158
158
</div>
159
159
<div class="prose dark:prose-invert">
160
160
{{ $c.Body | markdown }}
···
277
277
{{ $lastStatus := $all.Latest }}
278
278
{{ $kind := $lastStatus.Status.String }}
279
279
280
280
-
{{ $t := .TimeTaken }}
281
281
-
{{ $time := "" }}
282
282
-
283
283
-
{{ if $t }}
284
284
-
{{ $time = durationFmt $t }}
285
285
-
{{ else }}
286
286
-
{{ $time = printf "%s ago" (shortTimeFmt $lastStatus.Created) }}
287
287
-
{{ end }}
288
288
-
289
280
<div id="left" class="flex items-center gap-2 flex-shrink-0">
290
281
{{ template "repo/pipelines/fragments/workflowSymbol" $all }}
291
282
{{ $name }}
292
283
</div>
293
284
<div id="right" class="flex items-center gap-2 flex-shrink-0">
294
285
<span class="font-bold">{{ $kind }}</span>
295
295
-
<time>{{ $time }}</time>
286
286
+
{{ if .TimeTaken }}
287
287
+
{{ template "repo/fragments/duration" .TimeTaken }}
288
288
+
{{ else }}
289
289
+
{{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }}
290
290
+
{{ end }}
296
291
</div>
297
292
</div>
298
293
</a>
+3
-5
appview/pages/templates/repo/pulls/pulls.html
···
76
76
</span>
77
77
78
78
<span class="ml-1">
79
79
-
{{ template "user/fragments/picHandle" $owner }}
79
79
+
{{ template "user/fragments/picHandleLink" $owner }}
80
80
</span>
81
81
82
82
-
<span>
83
83
-
<time>
84
84
-
{{ .Created | timeFmt }}
85
85
-
</time>
82
82
+
<span class="before:content-['ยท']">
83
83
+
{{ template "repo/fragments/time" .Created }}
86
84
</span>
87
85
88
86
<span class="before:content-['ยท']">
+2
-2
appview/pages/templates/repo/tags.html
···
35
35
<span>{{ .Tag.Tagger.Name }}</span>
36
36
37
37
<span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['ยท']"></span>
38
38
-
<time>{{ shortTimeFmt .Tag.Tagger.When }}</time>
38
38
+
{{ template "repo/fragments/shortTime" .Tag.Tagger.When }}
39
39
{{ end }}
40
40
</div>
41
41
</div>
···
54
54
{{ slice .Tag.Target.String 0 8 }}
55
55
</a>
56
56
<span>{{ .Tag.Tagger.Name }}</span>
57
57
-
<time>{{ timeFmt .Tag.Tagger.When }}</time>
57
57
+
{{ template "repo/fragments/time" .Tag.Tagger.When }}
58
58
{{ end }}
59
59
</div>
60
60
</div>
+9
-3
appview/pages/templates/repo/tree.html
···
11
11
{{ template "repo/fragments/meta" . }}
12
12
{{ $title := printf "%s at %s · %s" $path .Ref .RepoInfo.FullName }}
13
13
{{ $url := printf "https://tangled.sh/%s/tree/%s%s" .RepoInfo.FullName .Ref $path }}
14
14
-
14
14
+
15
15
{{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo "Title" $title "Url" $url) }}
16
16
{{ end }}
17
17
···
63
63
</div>
64
64
</a>
65
65
{{ if .LastCommit}}
66
66
-
<time class="text-xs text-gray-500 dark:text-gray-400">{{ timeFmt .LastCommit.When }}</time>
66
66
+
<div class="flex items-end gap-2">
67
67
+
<span class="text text-gray-500 dark:text-gray-400 mr-6">{{ .LastCommit.Message }}</span>
68
68
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .LastCommit.When }}</span>
69
69
+
</div>
67
70
{{ end }}
68
71
</div>
69
72
</div>
···
80
83
</div>
81
84
</a>
82
85
{{ if .LastCommit}}
83
83
-
<time class="text-xs text-gray-500 dark:text-gray-400">{{ timeFmt .LastCommit.When }}</time>
86
86
+
<div class="flex items-end gap-2">
87
87
+
<span class="text text-gray-500 dark:text-gray-400 mr-6">{{ .LastCommit.Message }}</span>
88
88
+
<span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .LastCommit.When }}</span>
89
89
+
</div>
84
90
{{ end }}
85
91
</div>
86
92
</div>
+2
-2
appview/pages/templates/settings.html
···
39
39
{{ i "key" "w-3 h-3 dark:text-gray-300" }}
40
40
<p class="font-bold dark:text-white">{{ .Name }}</p>
41
41
</div>
42
42
-
<p class="text-sm text-gray-500 dark:text-gray-400">added {{ .Created | timeFmt }}</p>
42
42
+
<p class="text-sm text-gray-500 dark:text-gray-400">added {{ template "repo/fragments/time" .Created }}</p>
43
43
<div class="overflow-x-auto whitespace-nowrap flex-1 max-w-full">
44
44
<code class="text-sm text-gray-500 dark:text-gray-400">{{ .Key }}</code>
45
45
</div>
···
112
112
{{ end }}
113
113
</div>
114
114
</div>
115
115
-
<p class="text-sm text-gray-500 dark:text-gray-400">added {{ .CreatedAt | timeFmt }}</p>
115
115
+
<p class="text-sm text-gray-500 dark:text-gray-400">added {{ template "repo/fragments/time" .CreatedAt }}</p>
116
116
</div>
117
117
<div class="flex gap-2 items-center">
118
118
{{ if not .Verified }}
+2
-2
appview/pages/templates/spindles/fragments/spindleListing.html
···
11
11
{{ i "hard-drive" "w-4 h-4" }}
12
12
{{ .Instance }}
13
13
<span class="text-gray-500">
14
14
-
{{ .Created | shortTimeFmt }} ago
14
14
+
{{ template "repo/fragments/shortTimeAgo" .Created }}
15
15
</span>
16
16
</a>
17
17
{{ else }}
···
19
19
{{ i "hard-drive" "w-4 h-4" }}
20
20
{{ .Instance }}
21
21
<span class="text-gray-500">
22
22
-
{{ .Created | shortTimeFmt }} ago
22
22
+
{{ template "repo/fragments/shortTimeAgo" .Created }}
23
23
</span>
24
24
</div>
25
25
{{ end }}
+10
-10
appview/pages/templates/timeline.html
···
61
61
{{ $userHandle := index $.DidHandleMap .Repo.Did }}
62
62
<div class="flex items-center">
63
63
<p class="text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2">
64
64
-
{{ template "user/fragments/picHandle" $userHandle }}
64
64
+
{{ template "user/fragments/picHandleLink" $userHandle }}
65
65
{{ if .Source }}
66
66
forked
67
67
<a
···
84
84
>{{ .Repo.Name }}</a
85
85
>
86
86
{{ end }}
87
87
-
<time
87
87
+
<span
88
88
class="text-gray-700 dark:text-gray-400 text-xs"
89
89
-
>{{ .Repo.Created | timeFmt }}</time
89
89
+
>{{ template "repo/fragments/time" .Repo.Created }}</span
90
90
>
91
91
</p>
92
92
</div>
···
95
95
{{ $subjectHandle := index $.DidHandleMap .Follow.SubjectDid }}
96
96
<div class="flex items-center">
97
97
<p class="text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2">
98
98
-
{{ template "user/fragments/picHandle" $userHandle }}
98
98
+
{{ template "user/fragments/picHandleLink" $userHandle }}
99
99
followed
100
100
-
{{ template "user/fragments/picHandle" $subjectHandle }}
101
101
-
<time
100
100
+
{{ template "user/fragments/picHandleLink" $subjectHandle }}
101
101
+
<span
102
102
class="text-gray-700 dark:text-gray-400 text-xs"
103
103
-
>{{ .Follow.FollowedAt | timeFmt }}</time
103
103
+
>{{ template "repo/fragments/time" .Follow.FollowedAt }}</span
104
104
>
105
105
</p>
106
106
</div>
···
109
109
{{ $repoOwnerHandle := index $.DidHandleMap .Star.Repo.Did }}
110
110
<div class="flex items-center">
111
111
<p class="text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2">
112
112
-
{{ template "user/fragments/picHandle" $starrerHandle }}
112
112
+
{{ template "user/fragments/picHandleLink" $starrerHandle }}
113
113
starred
114
114
<a
115
115
href="/{{ $repoOwnerHandle }}/{{ .Star.Repo.Name }}"
116
116
class="no-underline hover:underline"
117
117
>{{ $repoOwnerHandle | truncateAt30 }}/{{ .Star.Repo.Name }}</a
118
118
>
119
119
-
<time
119
119
+
<span
120
120
class="text-gray-700 dark:text-gray-400 text-xs"
121
121
-
>{{ .Star.Created | timeFmt }}</time
121
121
+
>{{ template "repo/fragments/time" .Star.Created }}</spa
122
122
>
123
123
</p>
124
124
</div>
+6
-8
appview/pages/templates/user/fragments/picHandle.html
···
1
1
{{ define "user/fragments/picHandle" }}
2
2
-
<a href="/{{ . }}" class="flex items-center">
3
3
-
<img
4
4
-
src="{{ tinyAvatar . }}"
5
5
-
alt="{{ . }}"
6
6
-
class="rounded-full h-6 w-6 mr-1 border border-gray-300 dark:border-gray-700"
7
7
-
/>
8
8
-
{{ . | truncateAt30 }}
9
9
-
</a>
2
2
+
<img
3
3
+
src="{{ tinyAvatar . }}"
4
4
+
alt="{{ . }}"
5
5
+
class="rounded-full h-6 w-6 mr-1 border border-gray-300 dark:border-gray-700"
6
6
+
/>
7
7
+
{{ . | truncateAt30 }}
10
8
{{ end }}
+5
appview/pages/templates/user/fragments/picHandleLink.html
···
1
1
+
{{ define "user/fragments/picHandleLink" }}
2
2
+
<a href="/{{ . }}" class="flex items-center">
3
3
+
{{ template "user/fragments/picHandle" . }}
4
4
+
</a>
5
5
+
{{ end }}