Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/website/shared/tests/test_github_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from django.conf import settings
from django.contrib.auth.models import User
from django.test import TestCase

from shared.auth import isadmin, iscommitter
from shared.auth.github_state import GithubState, set_groups_for_new_user
from shared.auth.github_webhook import handle_webhook
Expand Down
56 changes: 53 additions & 3 deletions src/website/webview/static/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,8 @@ article .nixpkgs-packages {
display: none;
}

.nixpkgs-package {
.nixpkgs-package,
.nixpkg {
flex-grow: 1;
border: 1px solid var(--grey);
border-radius: 5px;
Expand Down Expand Up @@ -830,9 +831,8 @@ article .nixpkgs-packages {
margin-top: 1em;
}

.maintainers ul {
.maintainers article {
margin: 0;
list-style: none;
padding-left: 1em;
}

Expand All @@ -850,6 +850,56 @@ a:focus {
text-decoration: underline;
}

.maintainers-list {
display: flex;
flex-direction: column;
margin-left: 1em;
}

.maintainer-container {
display: flex;
flex-direction: row;
align-items: center;
height: 2em;
}

.maintainer-container input {
margin: 0;
appearance: none;
width: 2em;
height: 2em;
cursor: pointer;
}

.maintainer-container input::after {
position: relative;
top: -0.2em;
content: "↺";
text-align: center;
font-weight: 700;
font-size: 1.5em;
color: var(--grey);
}

.maintainer-container input:checked::after {
position: relative;
top: 0.2em;
content: "🗑";
text-align: center;
font-size: 1.2em;
color: var(--dark-grey);
}

.maintainer-container input ~ article {
margin: 0;
padding: 0;
}

.maintainer-container input:not(:checked) ~ article {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
.maintainer-container input:not(:checked) ~ article {
.maintainer-container input:not(:checked) ~ article,
.maintainer-container input:not(:checked) ~ article a.github-id
{

So the handle also gets greyed out

color: var(--grey);
text-decoration: line-through;
}

.suggestion .change-issue-state {
display: flex;
justify-content: space-between;
Expand Down
7 changes: 7 additions & 0 deletions src/website/webview/templates/components/maintainer.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<article class="maintainer">
<a class="github-id" href="https://github.com/{{ maintainer.github | urlencode }}">@{{ maintainer.github }}</a>
{{ maintainer.name }}
{% if maintainer.email %}
&lt;<a class="email" href="mailto:{{maintainer.email | urlencode}}">{{ maintainer.email }}</a>&gt;
{% endif %}
</article>
26 changes: 18 additions & 8 deletions src/website/webview/templates/components/maintainers_list.html
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
{% load viewutils %}

{% if maintainers %}
<details class="maintainers">
<summary>
Notify package maintainers: {{ maintainers | length }}
</summary>
<ul>

<div class="maintainers-list">
{% for maintainer in maintainers %}
<li class="maintainer">
<a class="github-id" href="https://github.com/{{ maintainer.github | urlencode }}">@{{ maintainer.github }}</a>
{{ maintainer.name }}
{% if maintainer.email %}
&lt;<a class="email" href="mailto:{{maintainer.email | urlencode}}">{{ maintainer.email }}</a>&gt;
<div class="maintainer-container">
{% if selectable %}
<input
type="checkbox"
name="maintainer_id"
value="{{ maintainer.github_id }}"
checked
hx-post=""
hx-swap="none"
hx-indicator="this .state-change-indicator"
/>
{% endif %}
</li>
{% maintainer maintainer %}
</div>
{% endfor %}
</ul>
</div>
</details>
{% endif %}
15 changes: 13 additions & 2 deletions src/website/webview/templates/components/nixpkgs_package_list.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
{% load viewutils %}

<div class="nixpkgs-packages">
{% for attribute_name, pdata in packages.items %}
{% for attribute, pdata in packages.items %}
<div class="nixpkgs-package-container">
{% nixpkgs_package attribute_name pdata %}
{% if selectable %}
<input
type="checkbox"
name="derivation_ids"
value="{{ pdata.derivation_ids|join:","}}"
checked
hx-post=""
hx-swap="none"
hx-indicator="this .state-change-indicator"
/>
{% endif %}
{% nixpkgs_package attribute pdata %}
</div>
{% endfor %}
</div>

This file was deleted.

6 changes: 5 additions & 1 deletion src/website/webview/templates/components/suggestion.html
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@
{% nixpkgs_package_list cached_suggestion.packages %}
{% endif %}

{% maintainers_list cached_suggestion.maintainers %}
{% if status_filter == "accepted" %}
{% selectable_maintainers_list cached_suggestion.maintainers %}
{% else %}
{% maintainers_list cached_suggestion.maintainers %}
{% endif %}

{% if user|is_maintainer_or_admin %}
<div class="change-issue-state">
Expand Down
34 changes: 30 additions & 4 deletions src/website/webview/templatetags/viewutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class PackageList(TypedDict):

class PackageListContext(TypedDict):
packages: PackageList
selectable: bool


class AffectedContext(TypedDict):
Expand All @@ -59,6 +60,15 @@ class Maintainer(TypedDict):
github_id: int


class MaintainerContext(TypedDict):
maintainer: Maintainer


class MaintainersListContext(TypedDict):
maintainers: list[Maintainer]
selectable: bool


@register.filter
def getitem(dictionary: dict, key: str) -> Any | None:
return dictionary.get(key)
Expand Down Expand Up @@ -145,7 +155,7 @@ def nixpkgs_package(attribute_name: str, pdata: Package) -> PackageContext:
return {"attribute_name": attribute_name, "pdata": pdata}


@register.inclusion_tag("components/selectable_nixpkgs_package_list.html")
@register.inclusion_tag("components/nixpkgs_package_list.html")
def selectable_nixpkgs_package_list(packages: PackageList) -> PackageListContext:
"""Renders the nixpkgs package list with additional checkboxes to have packages selectable.

Expand All @@ -160,6 +170,7 @@ def selectable_nixpkgs_package_list(packages: PackageList) -> PackageListContext
"""
return {
"packages": packages,
"selectable": True,
}


Expand All @@ -178,6 +189,7 @@ def nixpkgs_package_list(packages: PackageList) -> PackageListContext:
"""
return {
"packages": packages,
"selectable": False,
}


Expand All @@ -196,6 +208,20 @@ def suggestion_activity_log(

@register.inclusion_tag("components/maintainers_list.html")
def maintainers_list(
maintainers: list[dict],
) -> dict[str, list[dict]]:
return {"maintainers": maintainers}
maintainers: list[Maintainer],
) -> MaintainersListContext:
return {"maintainers": maintainers, "selectable": False}


@register.inclusion_tag("components/maintainers_list.html")
def selectable_maintainers_list(
maintainers: list[Maintainer],
) -> MaintainersListContext:
return {"maintainers": maintainers, "selectable": True}


@register.inclusion_tag("components/maintainer.html")
def maintainer(
maintainer: Maintainer,
) -> MaintainerContext:
return {"maintainer": maintainer}