1{% extends "base.html" %}
2
3{% block title %}Projects — td{% endblock %}
4
5{% block content %}
6<h1>Projects</h1>
7
8{% if projects.is_empty() %}
9<article class="card align-center">
10 <h2>No projects yet</h2>
11 <p class="text-light">Run <code>td project init <name></code> to create one.</p>
12</article>
13{% else %}
14<div class="container">
15 <div class="row">
16 {% for p in projects %}
17 <article class="card col-4">
18 {% match p %}
19 {% when ProjectCard::Ok { name, open, in_progress, closed, total } %}
20 <header>
21 <h2><a href="/projects/{{ name }}">{{ name }}</a></h2>
22 </header>
23 <div class="hstack gap-2">
24 {% if *in_progress > 0 %}
25 <span class="badge warning">{{ in_progress }} in progress</span>
26 {% endif %}
27 <span class="badge{% if *open > 0 %} success{% else %} secondary{% endif %}">{{ open }} open</span>
28 {% if *in_progress == 0 %}
29 <span class="badge secondary">0 in progress</span>
30 {% endif %}
31 <span class="badge secondary">{{ closed }} closed</span>
32 </div>
33 {% if *total > 0 %}
34 <progress value="{{ total - open - in_progress }}" max="{{ total }}" class="mt-2" aria-label="{{ closed }} of {{ total }} tasks closed in {{ name }}"></progress>
35 {% endif %}
36 {% when ProjectCard::Err { name, error } %}
37 <header class="hstack justify-between items-center">
38 <h2>{{ name }}</h2>
39 <span class="badge danger">error</span>
40 </header>
41 <p class="text-light">{{ error }}</p>
42 {% endmatch %}
43 </article>
44 {% endfor %}
45 </div>
46</div>
47{% endif %}
48{% endblock %}