Signed-off-by: oppiliappan me@oppi.li
+7
-7
appview/db/reaction.go
+7
-7
appview/db/reaction.go
···
11
12
const (
13
Like ReactionKind = "👍"
14
+
Unlike ReactionKind = "👎"
15
+
Laugh ReactionKind = "😆"
16
+
Celebration ReactionKind = "🎉"
17
+
Confused ReactionKind = "🫤"
18
+
Heart ReactionKind = "❤️"
19
+
Rocket ReactionKind = "🚀"
20
+
Eyes ReactionKind = "👀"
21
)
22
23
func (rk ReactionKind) String() string {
-54
appview/issues/issues.go
-54
appview/issues/issues.go
···
96
log.Println("failed to resolve issue owner", err)
97
}
98
99
-
identsToResolve := make([]string, len(comments))
100
-
for i, comment := range comments {
101
-
identsToResolve[i] = comment.OwnerDid
102
-
}
103
-
resolvedIds := rp.idResolver.ResolveIdents(r.Context(), identsToResolve)
104
-
didHandleMap := make(map[string]string)
105
-
for _, identity := range resolvedIds {
106
-
if !identity.Handle.IsInvalidHandle() {
107
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
108
-
} else {
109
-
didHandleMap[identity.DID.String()] = identity.DID.String()
110
-
}
111
-
}
112
-
113
rp.pages.RepoSingleIssue(w, pages.RepoSingleIssueParams{
114
LoggedInUser: user,
115
RepoInfo: f.RepoInfo(user),
···
117
Comments: comments,
118
119
IssueOwnerHandle: issueOwnerIdent.Handle.String(),
120
-
DidHandleMap: didHandleMap,
121
122
OrderedReactionKinds: db.OrderedReactionKinds,
123
Reactions: reactionCountMap,
···
371
return
372
}
373
374
-
identity, err := rp.idResolver.ResolveIdent(r.Context(), comment.OwnerDid)
375
-
if err != nil {
376
-
log.Println("failed to resolve did")
377
-
return
378
-
}
379
-
380
-
didHandleMap := make(map[string]string)
381
-
if !identity.Handle.IsInvalidHandle() {
382
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
383
-
} else {
384
-
didHandleMap[identity.DID.String()] = identity.DID.String()
385
-
}
386
-
387
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
388
LoggedInUser: user,
389
RepoInfo: f.RepoInfo(user),
390
-
DidHandleMap: didHandleMap,
391
Issue: issue,
392
Comment: comment,
393
})
···
503
}
504
505
// optimistic update for htmx
506
-
didHandleMap := map[string]string{
507
-
user.Did: user.Handle,
508
-
}
509
comment.Body = newBody
510
comment.Edited = &edited
511
···
513
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
514
LoggedInUser: user,
515
RepoInfo: f.RepoInfo(user),
516
-
DidHandleMap: didHandleMap,
517
Issue: issue,
518
Comment: comment,
519
})
···
598
}
599
600
// optimistic update for htmx
601
-
didHandleMap := map[string]string{
602
-
user.Did: user.Handle,
603
-
}
604
comment.Body = ""
605
comment.Deleted = &deleted
606
···
608
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
609
LoggedInUser: user,
610
RepoInfo: f.RepoInfo(user),
611
-
DidHandleMap: didHandleMap,
612
Issue: issue,
613
Comment: comment,
614
})
615
-
return
616
}
617
618
func (rp *Issues) RepoIssues(w http.ResponseWriter, r *http.Request) {
···
648
return
649
}
650
651
-
identsToResolve := make([]string, len(issues))
652
-
for i, issue := range issues {
653
-
identsToResolve[i] = issue.OwnerDid
654
-
}
655
-
resolvedIds := rp.idResolver.ResolveIdents(r.Context(), identsToResolve)
656
-
didHandleMap := make(map[string]string)
657
-
for _, identity := range resolvedIds {
658
-
if !identity.Handle.IsInvalidHandle() {
659
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
660
-
} else {
661
-
didHandleMap[identity.DID.String()] = identity.DID.String()
662
-
}
663
-
}
664
-
665
rp.pages.RepoIssues(w, pages.RepoIssuesParams{
666
LoggedInUser: rp.oauth.GetUser(r),
667
RepoInfo: f.RepoInfo(user),
668
Issues: issues,
669
-
DidHandleMap: didHandleMap,
670
FilteringByOpen: isOpen,
671
Page: page,
672
})
673
-
return
674
}
675
676
func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) {
···
96
log.Println("failed to resolve issue owner", err)
97
}
98
99
rp.pages.RepoSingleIssue(w, pages.RepoSingleIssueParams{
100
LoggedInUser: user,
101
RepoInfo: f.RepoInfo(user),
···
103
Comments: comments,
104
105
IssueOwnerHandle: issueOwnerIdent.Handle.String(),
106
107
OrderedReactionKinds: db.OrderedReactionKinds,
108
Reactions: reactionCountMap,
···
356
return
357
}
358
359
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
360
LoggedInUser: user,
361
RepoInfo: f.RepoInfo(user),
362
Issue: issue,
363
Comment: comment,
364
})
···
474
}
475
476
// optimistic update for htmx
477
comment.Body = newBody
478
comment.Edited = &edited
479
···
481
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
482
LoggedInUser: user,
483
RepoInfo: f.RepoInfo(user),
484
Issue: issue,
485
Comment: comment,
486
})
···
565
}
566
567
// optimistic update for htmx
568
comment.Body = ""
569
comment.Deleted = &deleted
570
···
572
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
573
LoggedInUser: user,
574
RepoInfo: f.RepoInfo(user),
575
Issue: issue,
576
Comment: comment,
577
})
578
}
579
580
func (rp *Issues) RepoIssues(w http.ResponseWriter, r *http.Request) {
···
610
return
611
}
612
613
rp.pages.RepoIssues(w, pages.RepoIssuesParams{
614
LoggedInUser: rp.oauth.GetUser(r),
615
RepoInfo: f.RepoInfo(user),
616
Issues: issues,
617
FilteringByOpen: isOpen,
618
Page: page,
619
})
620
}
621
622
func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) {
-16
appview/knots/knots.go
-16
appview/knots/knots.go
···
334
repoByMember[r.Did] = append(repoByMember[r.Did], r)
335
}
336
337
-
var didsToResolve []string
338
-
for _, m := range members {
339
-
didsToResolve = append(didsToResolve, m)
340
-
}
341
-
didsToResolve = append(didsToResolve, reg.ByDid)
342
-
resolvedIds := k.IdResolver.ResolveIdents(r.Context(), didsToResolve)
343
-
didHandleMap := make(map[string]string)
344
-
for _, identity := range resolvedIds {
345
-
if !identity.Handle.IsInvalidHandle() {
346
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
347
-
} else {
348
-
didHandleMap[identity.DID.String()] = identity.DID.String()
349
-
}
350
-
}
351
-
352
k.Pages.Knot(w, pages.KnotParams{
353
LoggedInUser: user,
354
-
DidHandleMap: didHandleMap,
355
Registration: reg,
356
Members: members,
357
Repos: repoByMember,
+16
-2
appview/pages/funcmap.go
+16
-2
appview/pages/funcmap.go
···
1
package pages
2
3
import (
4
"crypto/hmac"
5
"crypto/sha256"
6
"encoding/hex"
···
28
"split": func(s string) []string {
29
return strings.Split(s, "\n")
30
},
31
"truncateAt30": func(s string) string {
32
if len(s) <= 30 {
33
return s
···
74
"negf64": func(a float64) float64 {
75
return -a
76
},
77
-
"cond": func(cond interface{}, a, b string) string {
78
if cond == nil {
79
return b
80
}
···
167
return html.UnescapeString(s)
168
},
169
"nl2br": func(text string) template.HTML {
170
-
return template.HTML(strings.Replace(template.HTMLEscapeString(text), "\n", "<br>", -1))
171
},
172
"unwrapText": func(text string) string {
173
paragraphs := strings.Split(text, "\n\n")
···
1
package pages
2
3
import (
4
+
"context"
5
"crypto/hmac"
6
"crypto/sha256"
7
"encoding/hex"
···
29
"split": func(s string) []string {
30
return strings.Split(s, "\n")
31
},
32
+
"resolve": func(s string) string {
33
+
identity, err := p.resolver.ResolveIdent(context.Background(), s)
34
+
35
+
if err != nil {
36
+
return s
37
+
}
38
+
39
+
if identity.Handle.IsInvalidHandle() {
40
+
return "handle.invalid"
41
+
}
42
+
43
+
return "@" + identity.Handle.String()
44
+
},
45
"truncateAt30": func(s string) string {
46
if len(s) <= 30 {
47
return s
···
88
"negf64": func(a float64) float64 {
89
return -a
90
},
91
+
"cond": func(cond any, a, b string) string {
92
if cond == nil {
93
return b
94
}
···
181
return html.UnescapeString(s)
182
},
183
"nl2br": func(text string) template.HTML {
184
+
return template.HTML(strings.ReplaceAll(template.HTMLEscapeString(text), "\n", "<br>"))
185
},
186
"unwrapText": func(text string) string {
187
paragraphs := strings.Split(text, "\n\n")
+4
-16
appview/pages/pages.go
+4
-16
appview/pages/pages.go
···
24
"tangled.sh/tangled.sh/core/appview/pages/markup"
25
"tangled.sh/tangled.sh/core/appview/pages/repoinfo"
26
"tangled.sh/tangled.sh/core/appview/pagination"
27
"tangled.sh/tangled.sh/core/patchutil"
28
"tangled.sh/tangled.sh/core/types"
29
···
45
t map[string]*template.Template
46
47
avatar config.AvatarConfig
48
dev bool
49
embedFS embed.FS
50
templateDir string // Path to templates on disk for dev mode
51
rctx *markup.RenderContext
52
}
53
54
-
func NewPages(config *config.Config) *Pages {
55
// initialized with safe defaults, can be overriden per use
56
rctx := &markup.RenderContext{
57
IsDev: config.Core.Dev,
···
66
avatar: config.Avatar,
67
embedFS: Files,
68
rctx: rctx,
69
templateDir: "appview/pages",
70
}
71
···
290
type TimelineParams struct {
291
LoggedInUser *oauth.User
292
Timeline []db.TimelineEvent
293
-
DidHandleMap map[string]string
294
}
295
296
func (p *Pages) Timeline(w io.Writer, params TimelineParams) error {
···
318
319
type KnotParams struct {
320
LoggedInUser *oauth.User
321
-
DidHandleMap map[string]string
322
Registration *db.Registration
323
Members []string
324
Repos map[string][]db.Repo
···
375
Spindle db.Spindle
376
Members []string
377
Repos map[string][]db.Repo
378
-
DidHandleMap map[string]string
379
}
380
381
func (p *Pages) SpindleDashboard(w io.Writer, params SpindleDashboardParams) error {
···
408
ProfileTimeline *db.ProfileTimeline
409
Card ProfileCard
410
Punchcard db.Punchcard
411
-
412
-
DidHandleMap map[string]string
413
}
414
415
type ProfileCard struct {
···
430
LoggedInUser *oauth.User
431
Repos []db.Repo
432
Card ProfileCard
433
-
434
-
DidHandleMap map[string]string
435
}
436
437
func (p *Pages) ReposPage(w io.Writer, params ReposPageParams) error {
···
460
LoggedInUser *oauth.User
461
Profile *db.Profile
462
AllRepos []PinnedRepo
463
-
DidHandleMap map[string]string
464
}
465
466
type PinnedRepo struct {
···
779
RepoInfo repoinfo.RepoInfo
780
Active string
781
Issues []db.Issue
782
-
DidHandleMap map[string]string
783
Page pagination.Page
784
FilteringByOpen bool
785
}
···
796
Issue db.Issue
797
Comments []db.Comment
798
IssueOwnerHandle string
799
-
DidHandleMap map[string]string
800
801
OrderedReactionKinds []db.ReactionKind
802
Reactions map[db.ReactionKind]int
···
850
851
type SingleIssueCommentParams struct {
852
LoggedInUser *oauth.User
853
-
DidHandleMap map[string]string
854
RepoInfo repoinfo.RepoInfo
855
Issue *db.Issue
856
Comment *db.Comment
···
882
RepoInfo repoinfo.RepoInfo
883
Pulls []*db.Pull
884
Active string
885
-
DidHandleMap map[string]string
886
FilteringBy db.PullState
887
Stacks map[string]db.Stack
888
Pipelines map[string]db.Pipeline
···
915
LoggedInUser *oauth.User
916
RepoInfo repoinfo.RepoInfo
917
Active string
918
-
DidHandleMap map[string]string
919
Pull *db.Pull
920
Stack db.Stack
921
AbandonedPulls []*db.Pull
···
935
936
type RepoPullPatchParams struct {
937
LoggedInUser *oauth.User
938
-
DidHandleMap map[string]string
939
RepoInfo repoinfo.RepoInfo
940
Pull *db.Pull
941
Stack db.Stack
···
953
954
type RepoPullInterdiffParams struct {
955
LoggedInUser *oauth.User
956
-
DidHandleMap map[string]string
957
RepoInfo repoinfo.RepoInfo
958
Pull *db.Pull
959
Round int
···
24
"tangled.sh/tangled.sh/core/appview/pages/markup"
25
"tangled.sh/tangled.sh/core/appview/pages/repoinfo"
26
"tangled.sh/tangled.sh/core/appview/pagination"
27
+
"tangled.sh/tangled.sh/core/idresolver"
28
"tangled.sh/tangled.sh/core/patchutil"
29
"tangled.sh/tangled.sh/core/types"
30
···
46
t map[string]*template.Template
47
48
avatar config.AvatarConfig
49
+
resolver *idresolver.Resolver
50
dev bool
51
embedFS embed.FS
52
templateDir string // Path to templates on disk for dev mode
53
rctx *markup.RenderContext
54
}
55
56
+
func NewPages(config *config.Config, res *idresolver.Resolver) *Pages {
57
// initialized with safe defaults, can be overriden per use
58
rctx := &markup.RenderContext{
59
IsDev: config.Core.Dev,
···
68
avatar: config.Avatar,
69
embedFS: Files,
70
rctx: rctx,
71
+
resolver: res,
72
templateDir: "appview/pages",
73
}
74
···
293
type TimelineParams struct {
294
LoggedInUser *oauth.User
295
Timeline []db.TimelineEvent
296
}
297
298
func (p *Pages) Timeline(w io.Writer, params TimelineParams) error {
···
320
321
type KnotParams struct {
322
LoggedInUser *oauth.User
323
Registration *db.Registration
324
Members []string
325
Repos map[string][]db.Repo
···
376
Spindle db.Spindle
377
Members []string
378
Repos map[string][]db.Repo
379
}
380
381
func (p *Pages) SpindleDashboard(w io.Writer, params SpindleDashboardParams) error {
···
408
ProfileTimeline *db.ProfileTimeline
409
Card ProfileCard
410
Punchcard db.Punchcard
411
}
412
413
type ProfileCard struct {
···
428
LoggedInUser *oauth.User
429
Repos []db.Repo
430
Card ProfileCard
431
}
432
433
func (p *Pages) ReposPage(w io.Writer, params ReposPageParams) error {
···
456
LoggedInUser *oauth.User
457
Profile *db.Profile
458
AllRepos []PinnedRepo
459
}
460
461
type PinnedRepo struct {
···
774
RepoInfo repoinfo.RepoInfo
775
Active string
776
Issues []db.Issue
777
Page pagination.Page
778
FilteringByOpen bool
779
}
···
790
Issue db.Issue
791
Comments []db.Comment
792
IssueOwnerHandle string
793
794
OrderedReactionKinds []db.ReactionKind
795
Reactions map[db.ReactionKind]int
···
843
844
type SingleIssueCommentParams struct {
845
LoggedInUser *oauth.User
846
RepoInfo repoinfo.RepoInfo
847
Issue *db.Issue
848
Comment *db.Comment
···
874
RepoInfo repoinfo.RepoInfo
875
Pulls []*db.Pull
876
Active string
877
FilteringBy db.PullState
878
Stacks map[string]db.Stack
879
Pipelines map[string]db.Pipeline
···
906
LoggedInUser *oauth.User
907
RepoInfo repoinfo.RepoInfo
908
Active string
909
Pull *db.Pull
910
Stack db.Stack
911
AbandonedPulls []*db.Pull
···
925
926
type RepoPullPatchParams struct {
927
LoggedInUser *oauth.User
928
RepoInfo repoinfo.RepoInfo
929
Pull *db.Pull
930
Stack db.Stack
···
942
943
type RepoPullInterdiffParams struct {
944
LoggedInUser *oauth.User
945
RepoInfo repoinfo.RepoInfo
946
Pull *db.Pull
947
Round int
+3
-4
appview/pages/templates/knots/dashboard.html
+3
-4
appview/pages/templates/knots/dashboard.html
···
38
<div>
39
<div class="flex justify-between items-center">
40
<div class="flex items-center gap-2">
41
-
{{ i "user" "size-4" }}
42
-
{{ $user := index $.DidHandleMap . }}
43
-
<a href="/{{ $user }}">{{ $user }} <span class="ml-2 font-mono text-gray-500">{{.}}</span></a>
44
</div>
45
</div>
46
<div class="ml-2 pl-2 pt-2 border-l border-gray-200 dark:border-gray-700">
···
48
{{ range $repos }}
49
<div class="flex gap-2 items-center">
50
{{ i "book-marked" "size-4" }}
51
-
<a href="/{{ .Did }}/{{ .Name }}">
52
{{ .Name }}
53
</a>
54
</div>
···
38
<div>
39
<div class="flex justify-between items-center">
40
<div class="flex items-center gap-2">
41
+
{{ template "user/fragments/picHandleLink" . }}
42
+
<span class="ml-2 font-mono text-gray-500">{{.}}</span>
43
</div>
44
</div>
45
<div class="ml-2 pl-2 pt-2 border-l border-gray-200 dark:border-gray-700">
···
47
{{ range $repos }}
48
<div class="flex gap-2 items-center">
49
{{ i "book-marked" "size-4" }}
50
+
<a href="/{{ resolve .Did }}/{{ .Name }}">
51
{{ .Name }}
52
</a>
53
</div>
+1
-2
appview/pages/templates/repo/issues/fragments/issueComment.html
+1
-2
appview/pages/templates/repo/issues/fragments/issueComment.html
···
2
{{ with .Comment }}
3
<div id="comment-container-{{.CommentId}}">
4
<div class="flex items-center gap-2 mb-2 text-gray-500 dark:text-gray-400 text-sm flex-wrap">
5
-
{{ $owner := index $.DidHandleMap .OwnerDid }}
6
-
{{ template "user/fragments/picHandleLink" $owner }}
7
8
<!-- show user "hats" -->
9
{{ $isIssueAuthor := eq .OwnerDid $.Issue.OwnerDid }}
···
2
{{ with .Comment }}
3
<div id="comment-container-{{.CommentId}}">
4
<div class="flex items-center gap-2 mb-2 text-gray-500 dark:text-gray-400 text-sm flex-wrap">
5
+
{{ template "user/fragments/picHandleLink" .OwnerDid }}
6
7
<!-- show user "hats" -->
8
{{ $isIssueAuthor := eq .OwnerDid $.Issue.OwnerDid }}
+1
-1
appview/pages/templates/repo/issues/issue.html
+1
-1
appview/pages/templates/repo/issues/issue.html
···
70
{{ if gt $index 0 }}
71
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
72
{{ end }}
73
-
{{ template "repo/issues/fragments/issueComment" (dict "RepoInfo" $.RepoInfo "LoggedInUser" $.LoggedInUser "DidHandleMap" $.DidHandleMap "Issue" $.Issue "Comment" .)}}
74
</div>
75
{{ end }}
76
</section>
···
70
{{ if gt $index 0 }}
71
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
72
{{ end }}
73
+
{{ template "repo/issues/fragments/issueComment" (dict "RepoInfo" $.RepoInfo "LoggedInUser" $.LoggedInUser "Issue" $.Issue "Comment" .)}}
74
</div>
75
{{ end }}
76
</section>
+1
-2
appview/pages/templates/repo/issues/issues.html
+1
-2
appview/pages/templates/repo/issues/issues.html
+2
-2
appview/pages/templates/repo/pipelines/fragments/pipelineSymbol.html
+2
-2
appview/pages/templates/repo/pipelines/fragments/pipelineSymbol.html
···
23
</div>
24
{{ else if $allFail }}
25
<div class="flex gap-1 items-center">
26
-
{{ i "x" "size-4 text-red-600" }}
27
<span>0/{{ $total }}</span>
28
</div>
29
{{ else if $allTimeout }}
30
<div class="flex gap-1 items-center">
31
-
{{ i "clock-alert" "size-4 text-orange-400" }}
32
<span>0/{{ $total }}</span>
33
</div>
34
{{ else }}
···
23
</div>
24
{{ else if $allFail }}
25
<div class="flex gap-1 items-center">
26
+
{{ i "x" "size-4 text-red-500" }}
27
<span>0/{{ $total }}</span>
28
</div>
29
{{ else if $allTimeout }}
30
<div class="flex gap-1 items-center">
31
+
{{ i "clock-alert" "size-4 text-orange-500" }}
32
<span>0/{{ $total }}</span>
33
</div>
34
{{ else }}
+1
-1
appview/pages/templates/repo/pipelines/fragments/workflowSymbol.html
+1
-1
appview/pages/templates/repo/pipelines/fragments/workflowSymbol.html
+2
-2
appview/pages/templates/repo/pulls/fragments/pullHeader.html
+2
-2
appview/pages/templates/repo/pulls/fragments/pullHeader.html
···
17
{{ $icon = "git-merge" }}
18
{{ end }}
19
20
<section class="mt-2">
21
<div class="flex items-center gap-2">
22
<div
···
28
</div>
29
<span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1">
30
opened by
31
-
{{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
32
-
{{ template "user/fragments/picHandleLink" $owner }}
33
<span class="select-none before:content-['\00B7']"></span>
34
{{ template "repo/fragments/time" .Pull.Created }}
35
···
17
{{ $icon = "git-merge" }}
18
{{ end }}
19
20
+
{{ $owner := resolve .Pull.OwnerDid }}
21
<section class="mt-2">
22
<div class="flex items-center gap-2">
23
<div
···
29
</div>
30
<span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1">
31
opened by
32
+
{{ template "user/fragments/picHandleLink" .Pull.OwnerDid }}
33
<span class="select-none before:content-['\00B7']"></span>
34
{{ template "repo/fragments/time" .Pull.Created }}
35
+3
-4
appview/pages/templates/repo/pulls/pull.html
+3
-4
appview/pages/templates/repo/pulls/pull.html
···
47
<!-- round summary -->
48
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
49
<span class="gap-1 flex items-center">
50
-
{{ $owner := index $.DidHandleMap $.Pull.OwnerDid }}
51
{{ $re := "re" }}
52
{{ if eq .RoundNumber 0 }}
53
{{ $re = "" }}
54
{{ end }}
55
<span class="hidden md:inline">{{$re}}submitted</span>
56
-
by {{ template "user/fragments/picHandleLink" $owner }}
57
<span class="select-none before:content-['\00B7']"></span>
58
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a>
59
<span class="select-none before:content-['·']"></span>
···
151
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
152
{{ end }}
153
<div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1">
154
-
{{ $owner := index $.DidHandleMap $c.OwnerDid }}
155
-
{{ template "user/fragments/picHandleLink" $owner }}
156
<span class="before:content-['·']"></span>
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
</div>
···
47
<!-- round summary -->
48
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
49
<span class="gap-1 flex items-center">
50
+
{{ $owner := resolve $.Pull.OwnerDid }}
51
{{ $re := "re" }}
52
{{ if eq .RoundNumber 0 }}
53
{{ $re = "" }}
54
{{ end }}
55
<span class="hidden md:inline">{{$re}}submitted</span>
56
+
by {{ template "user/fragments/picHandleLink" $.Pull.OwnerDid }}
57
<span class="select-none before:content-['\00B7']"></span>
58
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a>
59
<span class="select-none before:content-['·']"></span>
···
151
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
152
{{ end }}
153
<div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1">
154
+
{{ template "user/fragments/picHandleLink" $c.OwnerDid }}
155
<span class="before:content-['·']"></span>
156
<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>
157
</div>
+1
-2
appview/pages/templates/repo/pulls/pulls.html
+1
-2
appview/pages/templates/repo/pulls/pulls.html
···
55
</a>
56
</div>
57
<div class="text-sm text-gray-500 dark:text-gray-400 flex flex-wrap items-center gap-1">
58
-
{{ $owner := index $.DidHandleMap .OwnerDid }}
59
{{ $bgColor := "bg-gray-800 dark:bg-gray-700" }}
60
{{ $icon := "ban" }}
61
···
76
</span>
77
78
<span class="ml-1">
79
-
{{ template "user/fragments/picHandleLink" $owner }}
80
</span>
81
82
<span class="before:content-['·']">
···
55
</a>
56
</div>
57
<div class="text-sm text-gray-500 dark:text-gray-400 flex flex-wrap items-center gap-1">
58
{{ $bgColor := "bg-gray-800 dark:bg-gray-700" }}
59
{{ $icon := "ban" }}
60
···
75
</span>
76
77
<span class="ml-1">
78
+
{{ template "user/fragments/picHandleLink" .OwnerDid }}
79
</span>
80
81
<span class="before:content-['·']">
+2
-4
appview/pages/templates/spindles/dashboard.html
+2
-4
appview/pages/templates/spindles/dashboard.html
···
42
<div>
43
<div class="flex justify-between items-center">
44
<div class="flex items-center gap-2">
45
-
{{ i "user" "size-4" }}
46
-
{{ $user := index $.DidHandleMap . }}
47
-
<a href="/{{ $user }}">{{ $user }}</a>
48
</div>
49
{{ if ne $.LoggedInUser.Did . }}
50
{{ block "removeMemberButton" (list $ . ) }} {{ end }}
···
109
hx-post="/spindles/{{ $root.Spindle.Instance }}/remove"
110
hx-swap="none"
111
hx-vals='{"member": "{{$member}}" }'
112
-
hx-confirm="Are you sure you want to remove {{ index $root.DidHandleMap $member }} from this instance?"
113
>
114
{{ i "user-minus" "w-4 h-4" }}
115
remove
···
42
<div>
43
<div class="flex justify-between items-center">
44
<div class="flex items-center gap-2">
45
+
{{ template "user/fragments/picHandleLink" . }}
46
</div>
47
{{ if ne $.LoggedInUser.Did . }}
48
{{ block "removeMemberButton" (list $ . ) }} {{ end }}
···
107
hx-post="/spindles/{{ $root.Spindle.Instance }}/remove"
108
hx-swap="none"
109
hx-vals='{"member": "{{$member}}" }'
110
+
hx-confirm="Are you sure you want to remove {{ resolve $member }} from this instance?"
111
>
112
{{ i "user-minus" "w-4 h-4" }}
113
remove
+9
-8
appview/pages/templates/timeline.html
+9
-8
appview/pages/templates/timeline.html
···
76
{{ $root := index . 0 }}
77
{{ $repo := index . 1 }}
78
{{ $source := index . 2 }}
79
-
{{ $userHandle := index $root.DidHandleMap $repo.Did }}
80
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
81
-
{{ template "user/fragments/picHandleLink" $userHandle }}
82
{{ with $source }}
83
forked
84
-
<a href="/{{ index $root.DidHandleMap .Did }}/{{ .Name }}"class="no-underline hover:underline">
85
-
{{ index $root.DidHandleMap .Did }}/{{ .Name }}
86
</a>
87
to
88
<a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a>
···
103
{{ $root := index . 0 }}
104
{{ $star := index . 1 }}
105
{{ with $star }}
106
-
{{ $starrerHandle := index $root.DidHandleMap .StarredByDid }}
107
-
{{ $repoOwnerHandle := index $root.DidHandleMap .Repo.Did }}
108
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
109
{{ template "user/fragments/picHandleLink" $starrerHandle }}
110
starred
···
126
{{ $profile := index . 2 }}
127
{{ $stat := index . 3 }}
128
129
-
{{ $userHandle := index $root.DidHandleMap $follow.UserDid }}
130
-
{{ $subjectHandle := index $root.DidHandleMap $follow.SubjectDid }}
131
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
132
{{ template "user/fragments/picHandleLink" $userHandle }}
133
followed
···
76
{{ $root := index . 0 }}
77
{{ $repo := index . 1 }}
78
{{ $source := index . 2 }}
79
+
{{ $userHandle := resolve $repo.Did }}
80
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
81
+
{{ template "user/fragments/picHandleLink" $repo.Did }}
82
{{ with $source }}
83
+
{{ $sourceDid := resolve .Did }}
84
forked
85
+
<a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline">
86
+
{{ $sourceDid }}/{{ .Name }}
87
</a>
88
to
89
<a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a>
···
104
{{ $root := index . 0 }}
105
{{ $star := index . 1 }}
106
{{ with $star }}
107
+
{{ $starrerHandle := resolve .StarredByDid }}
108
+
{{ $repoOwnerHandle := resolve .Repo.Did }}
109
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
110
{{ template "user/fragments/picHandleLink" $starrerHandle }}
111
starred
···
127
{{ $profile := index . 2 }}
128
{{ $stat := index . 3 }}
129
130
+
{{ $userHandle := resolve $follow.UserDid }}
131
+
{{ $subjectHandle := resolve $follow.SubjectDid }}
132
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
133
{{ template "user/fragments/picHandleLink" $userHandle }}
134
followed
+1
-1
appview/pages/templates/user/fragments/editPins.html
+1
-1
appview/pages/templates/user/fragments/editPins.html
···
27
<input type="checkbox" id="repo-{{$idx}}" name="pinnedRepo{{$idx}}" value="{{.RepoAt}}" {{if .IsPinned}}checked{{end}}>
28
<label for="repo-{{$idx}}" class="my-0 py-0 normal-case font-normal w-full">
29
<div class="flex justify-between items-center w-full">
30
-
<span class="flex-shrink-0 overflow-hidden text-ellipsis ">{{ index $.DidHandleMap .Did }}/{{.Name}}</span>
31
<div class="flex gap-1 items-center">
32
{{ i "star" "size-4 fill-current" }}
33
<span>{{ .RepoStats.StarCount }}</span>
···
27
<input type="checkbox" id="repo-{{$idx}}" name="pinnedRepo{{$idx}}" value="{{.RepoAt}}" {{if .IsPinned}}checked{{end}}>
28
<label for="repo-{{$idx}}" class="my-0 py-0 normal-case font-normal w-full">
29
<div class="flex justify-between items-center w-full">
30
+
<span class="flex-shrink-0 overflow-hidden text-ellipsis ">{{ resolve .Did }}/{{.Name}}</span>
31
<div class="flex gap-1 items-center">
32
{{ i "star" "size-4 fill-current" }}
33
<span>{{ .RepoStats.StarCount }}</span>
+3
-2
appview/pages/templates/user/fragments/picHandleLink.html
+3
-2
appview/pages/templates/user/fragments/picHandleLink.html
+3
-2
appview/pages/templates/user/fragments/repoCard.html
+3
-2
appview/pages/templates/user/fragments/repoCard.html
···
6
{{ with $repo }}
7
<div class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800">
8
<div class="font-medium dark:text-white flex gap-2 items-center">
9
{{- if $fullName -}}
10
-
<a href="/{{ index $root.DidHandleMap .Did }}/{{ .Name }}">{{ index $root.DidHandleMap .Did }}/{{ .Name }}</a>
11
{{- else -}}
12
-
<a href="/{{ index $root.DidHandleMap .Did }}/{{ .Name }}">{{ .Name }}</a>
13
{{- end -}}
14
</div>
15
{{ with .Description }}
···
6
{{ with $repo }}
7
<div class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800">
8
<div class="font-medium dark:text-white flex gap-2 items-center">
9
+
{{ $repoOwner := resolve .Did }}
10
{{- if $fullName -}}
11
+
<a href="/{{ $repoOwner }}/{{ .Name }}">{{ $repoOwner }}/{{ .Name }}</a>
12
{{- else -}}
13
+
<a href="/{{ $repoOwner }}/{{ .Name }}">{{ .Name }}</a>
14
{{- end -}}
15
</div>
16
{{ with .Description }}
+13
-20
appview/pages/templates/user/profile.html
+13
-20
appview/pages/templates/user/profile.html
···
50
</div>
51
{{ else }}
52
<div class="flex flex-col gap-1">
53
-
{{ block "repoEvents" (list .RepoEvents $.DidHandleMap) }} {{ end }}
54
-
{{ block "issueEvents" (list .IssueEvents $.DidHandleMap) }} {{ end }}
55
-
{{ block "pullEvents" (list .PullEvents $.DidHandleMap) }} {{ end }}
56
</div>
57
{{ end }}
58
</div>
···
66
{{ end }}
67
68
{{ define "repoEvents" }}
69
-
{{ $items := index . 0 }}
70
-
{{ $handleMap := index . 1 }}
71
-
72
-
{{ if gt (len $items) 0 }}
73
<details>
74
<summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
75
<div class="flex flex-wrap items-center gap-2">
76
{{ i "book-plus" "w-4 h-4" }}
77
-
created {{ len $items }} {{if eq (len $items) 1 }}repository{{else}}repositories{{end}}
78
</div>
79
</summary>
80
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
81
-
{{ range $items }}
82
<div class="flex flex-wrap items-center gap-2">
83
<span class="text-gray-500 dark:text-gray-400">
84
{{ if .Source }}
···
87
{{ i "book-plus" "w-4 h-4" }}
88
{{ end }}
89
</span>
90
-
<a href="/{{ index $handleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">
91
{{- .Repo.Name -}}
92
</a>
93
</div>
···
98
{{ end }}
99
100
{{ define "issueEvents" }}
101
-
{{ $i := index . 0 }}
102
-
{{ $items := $i.Items }}
103
-
{{ $stats := $i.Stats }}
104
-
{{ $handleMap := index . 1 }}
105
106
{{ if gt (len $items) 0 }}
107
<details>
···
129
</summary>
130
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
131
{{ range $items }}
132
-
{{ $repoOwner := index $handleMap .Metadata.Repo.Did }}
133
{{ $repoName := .Metadata.Repo.Name }}
134
{{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
135
···
163
{{ end }}
164
165
{{ define "pullEvents" }}
166
-
{{ $i := index . 0 }}
167
-
{{ $items := $i.Items }}
168
-
{{ $stats := $i.Stats }}
169
-
{{ $handleMap := index . 1 }}
170
{{ if gt (len $items) 0 }}
171
<details>
172
<summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
···
200
</summary>
201
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
202
{{ range $items }}
203
-
{{ $repoOwner := index $handleMap .Repo.Did }}
204
{{ $repoName := .Repo.Name }}
205
{{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
206
···
50
</div>
51
{{ else }}
52
<div class="flex flex-col gap-1">
53
+
{{ block "repoEvents" .RepoEvents }} {{ end }}
54
+
{{ block "issueEvents" .IssueEvents }} {{ end }}
55
+
{{ block "pullEvents" .PullEvents }} {{ end }}
56
</div>
57
{{ end }}
58
</div>
···
66
{{ end }}
67
68
{{ define "repoEvents" }}
69
+
{{ if gt (len .) 0 }}
70
<details>
71
<summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
72
<div class="flex flex-wrap items-center gap-2">
73
{{ i "book-plus" "w-4 h-4" }}
74
+
created {{ len . }} {{if eq (len .) 1 }}repository{{else}}repositories{{end}}
75
</div>
76
</summary>
77
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
78
+
{{ range . }}
79
<div class="flex flex-wrap items-center gap-2">
80
<span class="text-gray-500 dark:text-gray-400">
81
{{ if .Source }}
···
84
{{ i "book-plus" "w-4 h-4" }}
85
{{ end }}
86
</span>
87
+
<a href="/{{ resolve .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">
88
{{- .Repo.Name -}}
89
</a>
90
</div>
···
95
{{ end }}
96
97
{{ define "issueEvents" }}
98
+
{{ $items := .Items }}
99
+
{{ $stats := .Stats }}
100
101
{{ if gt (len $items) 0 }}
102
<details>
···
124
</summary>
125
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
126
{{ range $items }}
127
+
{{ $repoOwner := resolve .Metadata.Repo.Did }}
128
{{ $repoName := .Metadata.Repo.Name }}
129
{{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
130
···
158
{{ end }}
159
160
{{ define "pullEvents" }}
161
+
{{ $items := .Items }}
162
+
{{ $stats := .Stats }}
163
{{ if gt (len $items) 0 }}
164
<details>
165
<summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
···
193
</summary>
194
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
195
{{ range $items }}
196
+
{{ $repoOwner := resolve .Repo.Did }}
197
{{ $repoName := .Repo.Name }}
198
{{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
199
-61
appview/pulls/pulls.go
-61
appview/pulls/pulls.go
···
151
}
152
}
153
154
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
155
-
didHandleMap := make(map[string]string)
156
-
for _, identity := range resolvedIds {
157
-
if !identity.Handle.IsInvalidHandle() {
158
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
159
-
} else {
160
-
didHandleMap[identity.DID.String()] = identity.DID.String()
161
-
}
162
-
}
163
-
164
mergeCheckResponse := s.mergeCheck(f, pull, stack)
165
resubmitResult := pages.Unknown
166
if user != nil && user.Did == pull.OwnerDid {
···
212
s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{
213
LoggedInUser: user,
214
RepoInfo: repoInfo,
215
-
DidHandleMap: didHandleMap,
216
Pull: pull,
217
Stack: stack,
218
AbandonedPulls: abandonedPulls,
···
377
return
378
}
379
380
-
identsToResolve := []string{pull.OwnerDid}
381
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
382
-
didHandleMap := make(map[string]string)
383
-
for _, identity := range resolvedIds {
384
-
if !identity.Handle.IsInvalidHandle() {
385
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
386
-
} else {
387
-
didHandleMap[identity.DID.String()] = identity.DID.String()
388
-
}
389
-
}
390
-
391
patch := pull.Submissions[roundIdInt].Patch
392
diff := patchutil.AsNiceDiff(patch, pull.TargetBranch)
393
394
s.pages.RepoPullPatchPage(w, pages.RepoPullPatchParams{
395
LoggedInUser: user,
396
-
DidHandleMap: didHandleMap,
397
RepoInfo: f.RepoInfo(user),
398
Pull: pull,
399
Stack: stack,
···
440
return
441
}
442
443
-
identsToResolve := []string{pull.OwnerDid}
444
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
445
-
didHandleMap := make(map[string]string)
446
-
for _, identity := range resolvedIds {
447
-
if !identity.Handle.IsInvalidHandle() {
448
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
449
-
} else {
450
-
didHandleMap[identity.DID.String()] = identity.DID.String()
451
-
}
452
-
}
453
-
454
currentPatch, err := patchutil.AsDiff(pull.Submissions[roundIdInt].Patch)
455
if err != nil {
456
log.Println("failed to interdiff; current patch malformed")
···
472
RepoInfo: f.RepoInfo(user),
473
Pull: pull,
474
Round: roundIdInt,
475
-
DidHandleMap: didHandleMap,
476
Interdiff: interdiff,
477
DiffOpts: diffOpts,
478
})
···
494
return
495
}
496
497
-
identsToResolve := []string{pull.OwnerDid}
498
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
499
-
didHandleMap := make(map[string]string)
500
-
for _, identity := range resolvedIds {
501
-
if !identity.Handle.IsInvalidHandle() {
502
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
503
-
} else {
504
-
didHandleMap[identity.DID.String()] = identity.DID.String()
505
-
}
506
-
}
507
-
508
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
509
w.Write([]byte(pull.Submissions[roundIdInt].Patch))
510
}
···
595
m[p.Sha] = p
596
}
597
598
-
identsToResolve := make([]string, len(pulls))
599
-
for i, pull := range pulls {
600
-
identsToResolve[i] = pull.OwnerDid
601
-
}
602
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
603
-
didHandleMap := make(map[string]string)
604
-
for _, identity := range resolvedIds {
605
-
if !identity.Handle.IsInvalidHandle() {
606
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
607
-
} else {
608
-
didHandleMap[identity.DID.String()] = identity.DID.String()
609
-
}
610
-
}
611
-
612
s.pages.RepoPulls(w, pages.RepoPullsParams{
613
LoggedInUser: s.oauth.GetUser(r),
614
RepoInfo: f.RepoInfo(user),
615
Pulls: pulls,
616
-
DidHandleMap: didHandleMap,
617
FilteringBy: state,
618
Stacks: stacks,
619
Pipelines: m,
···
151
}
152
}
153
154
mergeCheckResponse := s.mergeCheck(f, pull, stack)
155
resubmitResult := pages.Unknown
156
if user != nil && user.Did == pull.OwnerDid {
···
202
s.pages.RepoSinglePull(w, pages.RepoSinglePullParams{
203
LoggedInUser: user,
204
RepoInfo: repoInfo,
205
Pull: pull,
206
Stack: stack,
207
AbandonedPulls: abandonedPulls,
···
366
return
367
}
368
369
patch := pull.Submissions[roundIdInt].Patch
370
diff := patchutil.AsNiceDiff(patch, pull.TargetBranch)
371
372
s.pages.RepoPullPatchPage(w, pages.RepoPullPatchParams{
373
LoggedInUser: user,
374
RepoInfo: f.RepoInfo(user),
375
Pull: pull,
376
Stack: stack,
···
417
return
418
}
419
420
currentPatch, err := patchutil.AsDiff(pull.Submissions[roundIdInt].Patch)
421
if err != nil {
422
log.Println("failed to interdiff; current patch malformed")
···
438
RepoInfo: f.RepoInfo(user),
439
Pull: pull,
440
Round: roundIdInt,
441
Interdiff: interdiff,
442
DiffOpts: diffOpts,
443
})
···
459
return
460
}
461
462
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
463
w.Write([]byte(pull.Submissions[roundIdInt].Patch))
464
}
···
549
m[p.Sha] = p
550
}
551
552
s.pages.RepoPulls(w, pages.RepoPullsParams{
553
LoggedInUser: s.oauth.GetUser(r),
554
RepoInfo: f.RepoInfo(user),
555
Pulls: pulls,
556
FilteringBy: state,
557
Stacks: stacks,
558
Pipelines: m,
-13
appview/spindles/spindles.go
-13
appview/spindles/spindles.go
···
113
return
114
}
115
116
-
identsToResolve := make([]string, len(members))
117
-
copy(identsToResolve, members)
118
-
resolvedIds := s.IdResolver.ResolveIdents(r.Context(), identsToResolve)
119
-
didHandleMap := make(map[string]string)
120
-
for _, identity := range resolvedIds {
121
-
if !identity.Handle.IsInvalidHandle() {
122
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
123
-
} else {
124
-
didHandleMap[identity.DID.String()] = identity.DID.String()
125
-
}
126
-
}
127
-
128
// organize repos by did
129
repoMap := make(map[string][]db.Repo)
130
for _, r := range repos {
···
136
Spindle: spindle,
137
Members: members,
138
Repos: repoMap,
139
-
DidHandleMap: didHandleMap,
140
})
141
}
142
-27
appview/state/profile.go
-27
appview/state/profile.go
···
108
}
109
}
110
111
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve)
112
-
didHandleMap := make(map[string]string)
113
-
for _, identity := range resolvedIds {
114
-
if !identity.Handle.IsInvalidHandle() {
115
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
116
-
} else {
117
-
didHandleMap[identity.DID.String()] = identity.DID.String()
118
-
}
119
-
}
120
-
121
followers, following, err := db.GetFollowerFollowing(s.db, ident.DID.String())
122
if err != nil {
123
log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err)
···
145
LoggedInUser: loggedInUser,
146
Repos: pinnedRepos,
147
CollaboratingRepos: pinnedCollaboratingRepos,
148
-
DidHandleMap: didHandleMap,
149
Card: pages.ProfileCard{
150
UserDid: ident.DID.String(),
151
UserHandle: ident.Handle.String(),
···
194
s.pages.ReposPage(w, pages.ReposPageParams{
195
LoggedInUser: loggedInUser,
196
Repos: repos,
197
-
DidHandleMap: map[string]string{ident.DID.String(): ident.Handle.String()},
198
Card: pages.ProfileCard{
199
UserDid: ident.DID.String(),
200
UserHandle: ident.Handle.String(),
···
518
})
519
}
520
521
-
var didsToResolve []string
522
-
for _, r := range allRepos {
523
-
didsToResolve = append(didsToResolve, r.Did)
524
-
}
525
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve)
526
-
didHandleMap := make(map[string]string)
527
-
for _, identity := range resolvedIds {
528
-
if !identity.Handle.IsInvalidHandle() {
529
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
530
-
} else {
531
-
didHandleMap[identity.DID.String()] = identity.DID.String()
532
-
}
533
-
}
534
-
535
s.pages.EditPinsFragment(w, pages.EditPinsParams{
536
LoggedInUser: user,
537
Profile: profile,
538
AllRepos: allRepos,
539
-
DidHandleMap: didHandleMap,
540
})
541
}
···
108
}
109
}
110
111
followers, following, err := db.GetFollowerFollowing(s.db, ident.DID.String())
112
if err != nil {
113
log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err)
···
135
LoggedInUser: loggedInUser,
136
Repos: pinnedRepos,
137
CollaboratingRepos: pinnedCollaboratingRepos,
138
Card: pages.ProfileCard{
139
UserDid: ident.DID.String(),
140
UserHandle: ident.Handle.String(),
···
183
s.pages.ReposPage(w, pages.ReposPageParams{
184
LoggedInUser: loggedInUser,
185
Repos: repos,
186
Card: pages.ProfileCard{
187
UserDid: ident.DID.String(),
188
UserHandle: ident.Handle.String(),
···
506
})
507
}
508
509
s.pages.EditPinsFragment(w, pages.EditPinsParams{
510
LoggedInUser: user,
511
Profile: profile,
512
AllRepos: allRepos,
513
})
514
}
+2
-31
appview/state/state.go
+2
-31
appview/state/state.go
···
61
return nil, fmt.Errorf("failed to create enforcer: %w", err)
62
}
63
64
-
pgs := pages.NewPages(config)
65
-
66
res, err := idresolver.RedisResolver(config.Redis.ToURL())
67
if err != nil {
68
log.Printf("failed to create redis resolver: %v", err)
69
res = idresolver.DefaultResolver()
70
}
71
72
cache := cache.New(config.Redis.Addr)
73
sess := session.New(cache)
74
···
180
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
181
}
182
183
-
var didsToResolve []string
184
-
for _, ev := range timeline {
185
-
if ev.Repo != nil {
186
-
didsToResolve = append(didsToResolve, ev.Repo.Did)
187
-
if ev.Source != nil {
188
-
didsToResolve = append(didsToResolve, ev.Source.Did)
189
-
}
190
-
}
191
-
if ev.Follow != nil {
192
-
didsToResolve = append(didsToResolve, ev.Follow.UserDid, ev.Follow.SubjectDid)
193
-
}
194
-
if ev.Star != nil {
195
-
didsToResolve = append(didsToResolve, ev.Star.StarredByDid, ev.Star.Repo.Did)
196
-
}
197
-
}
198
-
199
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve)
200
-
didHandleMap := make(map[string]string)
201
-
for _, identity := range resolvedIds {
202
-
if !identity.Handle.IsInvalidHandle() {
203
-
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
204
-
} else {
205
-
didHandleMap[identity.DID.String()] = identity.DID.String()
206
-
}
207
-
}
208
-
209
s.pages.Timeline(w, pages.TimelineParams{
210
LoggedInUser: user,
211
Timeline: timeline,
212
-
DidHandleMap: didHandleMap,
213
})
214
-
215
-
return
216
}
217
218
func (s *State) Keys(w http.ResponseWriter, r *http.Request) {
···
61
return nil, fmt.Errorf("failed to create enforcer: %w", err)
62
}
63
64
res, err := idresolver.RedisResolver(config.Redis.ToURL())
65
if err != nil {
66
log.Printf("failed to create redis resolver: %v", err)
67
res = idresolver.DefaultResolver()
68
}
69
70
+
pgs := pages.NewPages(config, res)
71
+
72
cache := cache.New(config.Redis.Addr)
73
sess := session.New(cache)
74
···
180
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
181
}
182
183
s.pages.Timeline(w, pages.TimelineParams{
184
LoggedInUser: user,
185
Timeline: timeline,
186
})
187
}
188
189
func (s *State) Keys(w http.ResponseWriter, r *http.Request) {