18e381ea Andy McCall 1 month ago ↶
1
{% extends "base.html" %}
2
{% import "repo_tabs.html" as m %}
3
{% block title %}#{{ i.number }} {{ i.title }} · {{ repo.owner }}/{{ repo.name }}{% endblock %}
4
{% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %}
5
{% block tabs %}{% call m::tabs(repo, "issues") %}{% endblock %}
6
{% block content %}
7
< div class = " head " > < h1 > {{ i.title }} < small class = " px " > #{{ i.number }}</ small >
8
< small > < span class = " tag{% if i.state == " closed" %} bad {% else %} head {% endif %}"> {{ i.state }}{% if !i.reason.is_empty() %}: {{ i.reason.replace("_", " ") }}{% endif %}</ span > {{ i.author }} opened this < time title = " {{ i.created_ms|when_i }}" > {{ i.created_ms|ago_i }}</ time > · {{ comments.len()|plural("comment", "comments") }}{% if i.locked %} · < span class = " tag " > locked</ span > {% endif %}</ small >
9
</ h1 > </ div >
10
{% if let Some(n) = notice %}< p class = " note " > {{ n }}</ p > {% endif %}
11
{% if let Some(e) = error %}< p class = " error " > {{ e }}</ p > {% endif %}
12
< div class = " side-layout " >
13
< div >
14
< div class = " comment " > < span class = " who " > {{ i.author }}</ span > < time class = " mute " title = " {{ i.created_ms|when_i }}" > {{ i.created_ms|ago_i }}</ time >
15
{% if can_edit %}< details class = " inline-edit " > < summary class = " small " > edit</ summary > < form method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/edit" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < input type = " text" name = " title" value = " {{ i.title }}" > < textarea name = " body" rows = " 6" > {{ i.body }}</ textarea > < button type = " submit" > SAVE</ button > </ form > </ details > {% endif %}
16
< div class = " body " > {% if i.body.is_empty() %}< p class = " mute " > No description.</ p > {% else %}{{ body_html|safe }}{% endif %}</ div > </ div >
17
{% for item in timeline %}
18
{% match item %}
19
{% when crate::web::issues::Item::Comment with (c, html) %}
20
< div class = " comment " id = " c{{ c.id }} " > < span class = " who " > {{ c.author }}</ span > < time class = " mute " title = " {{ c.created_ms|when_i }}" > {{ c.created_ms|ago_i }}</ time > {% if c.edited_ms.is_some() %} < span class = " mute small " > edited</ span > {% endif %}
21
{% if let Some(u) = shell.user %}{% if *u == c.author || can_triage %}< form class = " tiny " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/comment/{{ c.id }}/delete" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < button > delete</ button > </ form > {% endif %}{% endif %}
22
< div class = " body " > {{ html|safe }}</ div > </ div >
23
{% when crate::web::issues::Item::Event with (e) %}
78001759 Andy McCall 1 month ago ↶
24
< p class = " small mute timeline " > {{ e.actor }} {{ e.event }}{% if e.event.ends_with("by change") & & !e.detail.is_empty() %}{% let hash = e.detail.split(' ').next().unwrap_or("") %} < a href = " {{ repo.url }}/change/{{ hash }}" > < code > {{ hash }}</ code > </ a > {{ e.detail[hash.len()..] }}{% else if !e.detail.is_empty() %} {{ e.detail }}{% endif %} · < time title = " {{ e.at_ms|when_i }}" > {{ e.at_ms|ago_i }}</ time > </ p >
18e381ea Andy McCall 1 month ago ↶
25
{% endmatch %}
26
{% endfor %}
27
{% if shell.user.is_some() & & (!i.locked || can_triage) %}
28
< form class = " card wide " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/comment" >
29
< input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" >
30
< label for = " body" > Comment (Markdown)</ label > < textarea id = " body " name = " body" class = " md " rows = " 5" required > </ textarea >
31
< div class = " choice " >
32
< button type = " submit" > COMMENT</ button >
33
{% if i.state == "open" %}< button type = " submit" name = " close" value = " completed" > COMMENT AND CLOSE</ button > {% else %}< button type = " submit" name = " reopen" value = " 1" > COMMENT AND REOPEN</ button > {% endif %}
34
</ div >
35
</ form >
36
{% else if i.locked %}< p class = " empty " > This issue is locked.</ p > {% endif %}
37
</ div >
38
< aside class = " side " >
39
{% if shell.user.is_some() %}
40
< h3 > Subscription</ h3 >
41
< form method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/subscribe" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < button type = " submit" class = " small " > {% if subscribed %}UNSUBSCRIBE{% else %}SUBSCRIBE{% endif %}</ button > </ form >
42
{% endif %}
43
< h3 > Labels</ h3 >
44
{% if labels.is_empty() %}< p class = " mute small " > None.</ p > {% else %}< p > {% for l in labels %}< span class = " label " style = " -- c : {{ l.colour }}" title = " {{ l.description }}" > {{ l.name }}</ span > {% endfor %}</ p > {% endif %}
45
{% if can_triage & & !all_labels.is_empty() %}
46
< form class = " tiny-form " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/labels" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" >
47
{% for l in all_labels %}< label class = " small " > < input type = " checkbox" name = " label" value = " {{ l.id }}" {% if labels.contains (l) %} checked {% endif %}> {{ l.name }}</ label > {% endfor %}
48
< button type = " submit" class = " small " > SET</ button > </ form >
49
{% endif %}
50
< h3 > Assignees</ h3 >
51
{% if assignees.is_empty() %}< p class = " mute small " > Nobody.</ p > {% else %}< ul class = " plain " > {% for a in assignees %}< li > < a href = " /{{ a }}" > {{ a }}</ a > </ li > {% endfor %}</ ul > {% endif %}
52
{% if can_triage %}< form class = " tiny-form " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/assign" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < input type = " text" name = " username" placeholder = " username" size = " 12" > < button type = " submit" name = " action" value = " add" class = " small " > ADD</ button > < button type = " submit" name = " action" value = " remove" class = " small " > REMOVE</ button > </ form > {% endif %}
53
< h3 > Milestone</ h3 >
54
{% if let Some(ms) = milestone %}< p > < a href = " {{ repo.url }}/milestones" > {{ ms.title }}</ a > </ p > {% else %}< p class = " mute small " > None.</ p > {% endif %}
55
{% if can_triage & & !milestones.is_empty() %}< form class = " tiny-form " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/milestone" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < select name = " milestone" > < option value = " " > none</ option > {% for (ms, sel) in milestones %}< option value = " {{ ms.id }}" {% if *sel %} selected {% endif %}> {{ ms.title }}</ option > {% endfor %}</ select > < button type = " submit" class = " small " > SET</ button > </ form > {% endif %}
e1ec9fbf Andy McCall 1 month ago ↶
56
< h3 > Projects</ h3 >
57
{% if projects.is_empty() %}< p class = " mute small " > None. < a href = " /projects/{{ repo.owner }}" > {{ repo.owner }}'s projects</ a > </ p > {% else %}< ul class = " plain small " > {% for (p, col) in projects %}< li > < a href = " /projects/{{ p.owner }}/{{ p.number }}" > {{ p.title }}</ a > < span class = " mute " > · {{ col }}</ span > </ li > {% endfor %}</ ul > {% endif %}
18e381ea Andy McCall 1 month ago ↶
58
{% if can_triage %}
59
< h3 > Moderation</ h3 >
60
< form class = " tiny-form " method = " post" action = " {{ repo.url }}/issue/{{ i.number }}/state" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" >
61
< div class = " choice " >
62
{% if i.state == "open" %}< button type = " submit" name = " action" value = " close" class = " small " > CLOSE</ button > < button type = " submit" name = " action" value = " not_planned" class = " small " > NOT PLANNED</ button > {% else %}< button type = " submit" name = " action" value = " reopen" class = " small " > REOPEN</ button > {% endif %}
63
< button type = " submit" name = " action" value = " {% if i.locked %}unlock{% else %}lock{% endif %}" class = " small " > {% if i.locked %}UNLOCK{% else %}LOCK{% endif %}</ button >
64
< button type = " submit" name = " action" value = " {% if i.pinned %}unpin{% else %}pin{% endif %}" class = " small " > {% if i.pinned %}UNPIN{% else %}PIN{% endif %}</ button >
65
</ div > </ form >
66
{% endif %}
67
</ aside >
68
</ div >
69
{% endblock %}