Skip to content

Commit 055aeb7

Browse files
committed
refactor: add trash button to maintainers, refactor their templates
1 parent a6bf153 commit 055aeb7

8 files changed

Lines changed: 126 additions & 36 deletions

File tree

src/website/shared/tests/test_github_sync.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from django.conf import settings
1010
from django.contrib.auth.models import User
1111
from django.test import TestCase
12+
1213
from shared.auth import isadmin, iscommitter
1314
from shared.auth.github_state import GithubState, set_groups_for_new_user
1415
from shared.auth.github_webhook import handle_webhook

src/website/webview/static/style.css

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,8 @@ article .nixpkgs-packages {
746746
display: none;
747747
}
748748

749-
.nixpkgs-package {
749+
.nixpkgs-package,
750+
.nixpkg {
750751
flex-grow: 1;
751752
border: 1px solid var(--grey);
752753
border-radius: 5px;
@@ -830,9 +831,8 @@ article .nixpkgs-packages {
830831
margin-top: 1em;
831832
}
832833

833-
.maintainers ul {
834+
.maintainers article {
834835
margin: 0;
835-
list-style: none;
836836
padding-left: 1em;
837837
}
838838

@@ -850,6 +850,55 @@ a:focus {
850850
text-decoration: underline;
851851
}
852852

853+
.maintainers-list {
854+
display: flex;
855+
flex-direction: column;
856+
margin-left: 1em;
857+
}
858+
859+
.maintainer-container {
860+
display: flex;
861+
flex-direction: row;
862+
align-items: center;
863+
height: 2em;
864+
}
865+
866+
.maintainer-container input {
867+
margin: 0;
868+
appearance: none;
869+
width: 2em;
870+
height: 2em;
871+
cursor: pointer;
872+
}
873+
874+
.maintainer-container input::after {
875+
content: "↺";
876+
text-align: center;
877+
font-size: 1.5em;
878+
color: var(--dark-grey);
879+
}
880+
881+
.maintainer-container input:checked::after {
882+
content: "🗑";
883+
text-align: center;
884+
font-size: 1.5em;
885+
color: var(--dark-grey);
886+
}
887+
888+
.maintainer-container input ~ article {
889+
margin: 0;
890+
padding: 0;
891+
}
892+
893+
.maintainer-container input:not(:checked) ~ article h3 {
894+
color: var(--grey);
895+
text-decoration: line-through;
896+
}
897+
898+
.maintainer-container input:not(:checked) ~ article h3 ~ * {
899+
display: none;
900+
}
901+
853902
.suggestion .change-issue-state {
854903
display: flex;
855904
justify-content: space-between;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<article class="maintainer">
2+
<a class="github-id" href="https://github.com/{{ maintainer.github | urlencode }}">@{{ maintainer.github }}</a>
3+
{{ maintainer.name }}
4+
{% if maintainer.email %}
5+
&lt;<a class="email" href="mailto:{{maintainer.email | urlencode}}">{{ maintainer.email }}</a>&gt;
6+
{% endif %}
7+
</article>
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
1+
{% load viewutils %}
2+
13
{% if maintainers %}
24
<details class="maintainers">
35
<summary>
46
Notify package maintainers: {{ maintainers | length }}
57
</summary>
6-
<ul>
8+
9+
<div class="maintainers-list">
710
{% for maintainer in maintainers %}
8-
<li class="maintainer">
9-
<a class="github-id" href="https://github.com/{{ maintainer.github | urlencode }}">@{{ maintainer.github }}</a>
10-
{{ maintainer.name }}
11-
{% if maintainer.email %}
12-
&lt;<a class="email" href="mailto:{{maintainer.email | urlencode}}">{{ maintainer.email }}</a>&gt;
11+
<div class="maintainer-container">
12+
{% if selectable %}
13+
<input
14+
type="checkbox"
15+
name="maintainer_id"
16+
value="{{ maintainer.github_id }}"
17+
checked
18+
hx-post=""
19+
hx-swap="none"
20+
hx-indicator="this .state-change-indicator"
21+
/>
1322
{% endif %}
14-
</li>
23+
{% maintainer maintainer %}
24+
</div>
1525
{% endfor %}
16-
</ul>
26+
</div>
1727
</details>
1828
{% endif %}
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
{% load viewutils %}
22

33
<div class="nixpkgs-packages">
4-
{% for attribute_name, pdata in packages.items %}
4+
{% for attribute, pdata in packages.items %}
55
<div class="nixpkgs-package-container">
6-
{% nixpkgs_package attribute_name pdata %}
6+
{% if selectable %}
7+
<input
8+
type="checkbox"
9+
name="derivation_ids"
10+
value="{{ pdata.derivation_ids|join:","}}"
11+
checked
12+
hx-post=""
13+
hx-swap="none"
14+
hx-indicator="this .state-change-indicator"
15+
/>
16+
{% endif %}
17+
{% nixpkgs_package attribute pdata %}
718
</div>
819
{% endfor %}
920
</div>

src/website/webview/templates/components/selectable_nixpkgs_package_list.html

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/website/webview/templates/components/suggestion.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@
4949
{% nixpkgs_package_list cached_suggestion.packages %}
5050
{% endif %}
5151

52-
{% maintainers_list cached_suggestion.maintainers %}
52+
{% if status_filter == "accepted" %}
53+
{% selectable_maintainers_list cached_suggestion.maintainers %}
54+
{% else %}
55+
{% maintainers_list cached_suggestion.maintainers %}
56+
{% endif %}
5357

5458
{% if user|is_maintainer_or_admin %}
5559
<div class="change-issue-state">

src/website/webview/templatetags/viewutils.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class PackageList(TypedDict):
4040

4141
class PackageListContext(TypedDict):
4242
packages: PackageList
43+
selectable: bool
4344

4445

4546
class AffectedContext(TypedDict):
@@ -59,6 +60,15 @@ class Maintainer(TypedDict):
5960
github_id: int
6061

6162

63+
class MaintainerContext(TypedDict):
64+
maintainer: Maintainer
65+
66+
67+
class MaintainersListContext(TypedDict):
68+
maintainers: list[Maintainer]
69+
selectable: bool
70+
71+
6272
@register.filter
6373
def getitem(dictionary: dict, key: str) -> Any | None:
6474
return dictionary.get(key)
@@ -145,7 +155,7 @@ def nixpkgs_package(attribute_name: str, pdata: Package) -> PackageContext:
145155
return {"attribute_name": attribute_name, "pdata": pdata}
146156

147157

148-
@register.inclusion_tag("components/selectable_nixpkgs_package_list.html")
158+
@register.inclusion_tag("components/nixpkgs_package_list.html")
149159
def selectable_nixpkgs_package_list(packages: PackageList) -> PackageListContext:
150160
"""Renders the nixpkgs package list with additional checkboxes to have packages selectable.
151161
@@ -160,6 +170,7 @@ def selectable_nixpkgs_package_list(packages: PackageList) -> PackageListContext
160170
"""
161171
return {
162172
"packages": packages,
173+
"selectable": True,
163174
}
164175

165176

@@ -178,6 +189,7 @@ def nixpkgs_package_list(packages: PackageList) -> PackageListContext:
178189
"""
179190
return {
180191
"packages": packages,
192+
"selectable": False,
181193
}
182194

183195

@@ -196,6 +208,20 @@ def suggestion_activity_log(
196208

197209
@register.inclusion_tag("components/maintainers_list.html")
198210
def maintainers_list(
199-
maintainers: list[dict],
200-
) -> dict[str, list[dict]]:
201-
return {"maintainers": maintainers}
211+
maintainers: list[Maintainer],
212+
) -> MaintainersListContext:
213+
return {"maintainers": maintainers, "selectable": False}
214+
215+
216+
@register.inclusion_tag("components/maintainers_list.html")
217+
def selectable_maintainers_list(
218+
maintainers: list[Maintainer],
219+
) -> MaintainersListContext:
220+
return {"maintainers": maintainers, "selectable": True}
221+
222+
223+
@register.inclusion_tag("components/maintainer.html")
224+
def maintainer(
225+
maintainer: Maintainer,
226+
) -> MaintainerContext:
227+
return {"maintainer": maintainer}

0 commit comments

Comments
 (0)