+1
appview/oauth/handler/handler.go
+1
appview/oauth/handler/handler.go
+25
-27
appview/pages/templates/repo/settings/fragments/labelListing.html
+25
-27
appview/pages/templates/repo/settings/fragments/labelListing.html
···
1
1
{{ define "repo/settings/fragments/labelListing" }}
2
2
{{ $root := index . 0 }}
3
3
{{ $label := index . 1 }}
4
-
<div id="label-{{$label.Id}}" class="flex items-center justify-between p-2 pl-4">
5
-
<div class="flex flex-col gap-1 text-sm min-w-0 max-w-[80%]">
6
-
{{ template "labels/fragments/labelDef" $label }}
7
-
<div class="flex flex-wrap text items-center gap-1 text-gray-500 dark:text-gray-400">
4
+
<div class="flex flex-col gap-1 text-sm min-w-0 max-w-[80%]">
5
+
{{ template "labels/fragments/labelDef" $label }}
6
+
<div class="flex flex-wrap text items-center gap-1 text-gray-500 dark:text-gray-400">
7
+
{{ if $label.ValueType.IsNull }}
8
+
basic
9
+
{{ else }}
8
10
{{ $label.ValueType.Type }} type
9
-
{{ if $label.ValueType.IsEnumType }}
10
-
<span class="before:content-['·'] before:select-none"></span>
11
-
{{ join $label.ValueType.Enum ", " }}
12
-
{{ end }}
13
-
{{ if $label.ValueType.IsDidFormat }}
14
-
<span class="before:content-['·'] before:select-none"></span>
15
-
DID format
16
-
{{ end }}
17
-
</div>
11
+
{{ end }}
12
+
13
+
{{ if $label.ValueType.IsEnum }}
14
+
<span class="before:content-['·'] before:select-none"></span>
15
+
{{ join $label.ValueType.Enum ", " }}
16
+
{{ end }}
17
+
18
+
{{ if $label.ValueType.IsDidFormat }}
19
+
<span class="before:content-['·'] before:select-none"></span>
20
+
DID format
21
+
{{ end }}
22
+
23
+
{{ if $label.Multiple }}
24
+
<span class="before:content-['·'] before:select-none"></span>
25
+
multiple
26
+
{{ end }}
27
+
28
+
<span class="before:content-['·'] before:select-none"></span>
29
+
{{ join $label.Scope ", " }}
18
30
</div>
19
-
{{ if $root.RepoInfo.Roles.IsOwner }}
20
-
<button
21
-
class="btn text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 gap-2 group"
22
-
title="Delete label"
23
-
hx-delete="/{{ $root.RepoInfo.FullName }}/settings/label"
24
-
hx-swap="none"
25
-
hx-vals='{"label-id": "{{ $label.Id }}"}'
26
-
hx-confirm="Are you sure you want to delete the label `{{ $label.Name }}`?"
27
-
>
28
-
{{ i "trash-2" "w-5 h-5" }}
29
-
<span class="hidden md:inline">delete</span>
30
-
{{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
31
-
</button>
32
-
{{ end }}
33
31
</div>
34
32
{{ end }}
+63
-9
appview/pages/templates/repo/settings/general.html
+63
-9
appview/pages/templates/repo/settings/general.html
···
7
7
</div>
8
8
<div class="col-span-1 md:col-span-3 flex flex-col gap-6 p-2">
9
9
{{ template "branchSettings" . }}
10
-
{{ template "labelSettings" . }}
10
+
{{ template "defaultLabelSettings" . }}
11
+
{{ template "customLabelSettings" . }}
11
12
{{ template "deleteRepo" . }}
12
13
<div id="operation-error" class="text-red-500 dark:text-red-400"></div>
13
14
</div>
···
43
44
</div>
44
45
{{ end }}
45
46
46
-
{{ define "labelSettings" }}
47
+
{{ define "defaultLabelSettings" }}
48
+
<div class="flex flex-col gap-2">
49
+
<h2 class="text-sm pb-2 uppercase font-bold">Default Labels</h2>
50
+
<p class="text-gray-500 dark:text-gray-400">
51
+
Manage your issues and pulls by creating labels to categorize them. Only
52
+
repository owners may configure labels. You may choose to subscribe to
53
+
default labels, or create entirely custom labels.
54
+
</p>
55
+
<div class="flex flex-col rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700 w-full">
56
+
{{ range .DefaultLabels }}
57
+
<div id="label-{{.Id}}" class="flex items-center justify-between p-2 pl-4">
58
+
{{ template "repo/settings/fragments/labelListing" (list $ .) }}
59
+
{{ $action := "subscribe" }}
60
+
{{ $icon := "plus" }}
61
+
{{ if mapContains $.SubscribedLabels .AtUri.String }}
62
+
{{ $action = "unsubscribe" }}
63
+
{{ $icon = "minus" }}
64
+
{{ end }}
65
+
<button
66
+
class="btn gap-2 group"
67
+
title="{{$action}} from label"
68
+
{{ if not $.RepoInfo.Roles.IsOwner }}disabled{{ end }}
69
+
hx-post="/{{ $.RepoInfo.FullName }}/settings/label/{{$action}}"
70
+
hx-swap="none"
71
+
hx-vals='{"label": "{{ .AtUri.String }}"}'>
72
+
{{ i $icon "size-4" }}
73
+
<span class="hidden md:inline">{{$action}}</span>
74
+
{{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
75
+
</button>
76
+
</div>
77
+
{{ else }}
78
+
<div class="flex items-center justify-center p-2 text-gray-500">
79
+
no labels added yet
80
+
</div>
81
+
{{ end }}
82
+
</div>
83
+
<div id="default-label-operation" class="error"></div>
84
+
</div>
85
+
{{ end }}
86
+
87
+
{{ define "customLabelSettings" }}
47
88
<div class="flex flex-col gap-2">
48
89
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center">
49
90
<div class="col-span-1 md:col-span-2">
50
-
<h2 class="text-sm pb-2 uppercase font-bold">Labels</h2>
51
-
<p class="text-gray-500 dark:text-gray-400">
52
-
Manage your issues and pulls by creating labels to categorize them.
53
-
Only repository owners may configure labels.
54
-
</p>
91
+
<h2 class="text-sm pb-2 uppercase font-bold">Custom Labels</h2>
55
92
</div>
56
93
<div class="col-span-1 md:col-span-1 md:justify-self-end">
57
94
<button
95
+
title="Add custom label"
58
96
class="btn flex items-center gap-2"
59
97
popovertarget="add-labeldef-modal"
60
98
{{ if not .RepoInfo.Roles.IsOwner }}disabled{{ end }}
···
65
103
<div
66
104
id="add-labeldef-modal"
67
105
popover
68
-
class="bg-white w-full sm:w-[30rem] dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700 drop-shadow dark:text-white backdrop:bg-gray-400/50 dark:backdrop:bg-gray-800/50">
106
+
class="bg-white w-full sm:w-[30rem] dark:bg-gray-800 p-6 max-h-dvh overflow-y-auto rounded border border-gray-200 dark:border-gray-700 drop-shadow dark:text-white backdrop:bg-gray-400/50 dark:backdrop:bg-gray-800/50">
69
107
{{ template "repo/settings/fragments/addLabelDefModal" . }}
70
108
</div>
71
109
</div>
72
110
</div>
73
111
<div class="flex flex-col rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700 w-full">
74
112
{{ range .Labels }}
75
-
{{ template "repo/settings/fragments/labelListing" (list $ .) }}
113
+
<div id="label-{{.Id}}" class="flex items-center justify-between p-2 pl-4">
114
+
{{ template "repo/settings/fragments/labelListing" (list $ .) }}
115
+
{{ if $.RepoInfo.Roles.IsOwner }}
116
+
<button
117
+
class="btn text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 gap-2 group"
118
+
title="Delete label"
119
+
hx-delete="/{{ $.RepoInfo.FullName }}/settings/label"
120
+
hx-swap="none"
121
+
hx-vals='{"label-id": "{{ .Id }}"}'
122
+
hx-confirm="Are you sure you want to delete the label `{{ .Name }}`?"
123
+
>
124
+
{{ i "trash-2" "w-5 h-5" }}
125
+
<span class="hidden md:inline">delete</span>
126
+
{{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
127
+
</button>
128
+
{{ end }}
129
+
</div>
76
130
{{ else }}
77
131
<div class="flex items-center justify-center p-2 text-gray-500">
78
132
no labels added yet
+4
-4
appview/repo/router.go
+4
-4
appview/repo/router.go
···
82
82
r.With(mw.RepoPermissionMiddleware("repo:settings")).Route("/settings", func(r chi.Router) {
83
83
r.Get("/", rp.RepoSettings)
84
84
r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/spindle", rp.EditSpindle)
85
-
r.With(mw.RepoPermissionMiddleware("repo:owner")).Put("/label", rp.AddLabel)
86
-
r.With(mw.RepoPermissionMiddleware("repo:owner")).Delete("/label", rp.DeleteLabel)
87
-
r.With(mw.RepoPermissionMiddleware("repo:owner")).Put("/label/subscribe", rp.SubscribeLabel)
88
-
r.With(mw.RepoPermissionMiddleware("repo:owner")).Delete("/label/subscribe", rp.UnsubscribeLabel)
85
+
r.With(mw.RepoPermissionMiddleware("repo:owner")).Put("/label", rp.AddLabelDef)
86
+
r.With(mw.RepoPermissionMiddleware("repo:owner")).Delete("/label", rp.DeleteLabelDef)
87
+
r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/label/subscribe", rp.SubscribeLabel)
88
+
r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/label/unsubscribe", rp.UnsubscribeLabel)
89
89
r.With(mw.RepoPermissionMiddleware("repo:invite")).Put("/collaborator", rp.AddCollaborator)
90
90
r.With(mw.RepoPermissionMiddleware("repo:delete")).Delete("/delete", rp.DeleteRepo)
91
91
r.Put("/branches/default", rp.SetDefaultBranch)