gabriel / musehub public
milestone_detail.html html
73 lines 2.5 KB
6b53f1af feat: supercharge all pages, full SOC refactor, and Python 3.14 upgrade (#7) Gabriel Cardona <cgcardona@gmail.com> 5d ago
1 {% extends "musehub/base.html" %}
2
3 {% block title %}{{ milestone.title }} — {{ owner }}/{{ repo_slug }}{% endblock %}
4 {% block breadcrumb %}
5 <a href="/{{ owner }}">{{ owner }}</a> /
6 <a href="/{{ owner }}/{{ repo_slug }}">{{ repo_slug }}</a> /
7 <a href="{{ base_url }}/milestones">milestones</a> /
8 #{{ milestone.number }}
9 {% endblock %}
10 {% block repo_nav %}{% include "musehub/partials/repo_nav.html" %}{% endblock %}
11
12 {% block page_json %}{"page": "repo", "repo_id": {{ repo_id | tojson }}}{% endblock %}
13
14 {% block content %}
15 {# Back link #}
16 <div style="margin-bottom:12px">
17 <a href="{{ base_url }}/milestones">&larr; All milestones</a>
18 </div>
19
20 {# Milestone header card #}
21 <div class="card" style="margin-bottom:16px">
22 <div class="milestone-header">
23 <h1>🏁 {{ milestone.title }}</h1>
24 <div class="milestone-header-meta">
25 <span class="badge {% if milestone.state == 'open' %}badge-open{% else %}badge-closed{% endif %}">
26 {{ milestone.state }}
27 </span>
28 <span>#{{ milestone.number }}</span>
29 {% if milestone.due_on %}
30 <span>📅 Due {{ milestone.due_on.strftime('%b %-d, %Y') }}</span>
31 {% endif %}
32 </div>
33 {% if milestone.description %}
34 <p class="milestone-description">{{ milestone.description }}</p>
35 {% endif %}
36 </div>
37
38 {# Progress bar #}
39 <div class="milestone-progress-large">
40 <div class="milestone-progress-bar-track">
41 <div class="milestone-progress-bar-fill" style="width:{{ pct }}%"></div>
42 </div>
43 <div class="milestone-progress-counts">
44 {{ milestone.closed_issues }} closed &bull; {{ milestone.open_issues }} open &bull; {{ pct }}% complete
45 </div>
46 </div>
47 </div>
48
49 {# Issues section #}
50 <div class="card">
51 <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:8px">
52 <h2 style="margin:0">Issues</h2>
53 <span style="font-size:13px;color:var(--text-muted,#8b949e)">{{ linked_issues | length }} shown</span>
54 </div>
55
56 {# Issue state filter tabs #}
57 <div class="milestone-state-tabs">
58 {% for s, label in [('open', 'Open'), ('closed', 'Closed'), ('all', 'All')] %}
59 <a href="{{ base_url }}/milestones/{{ milestone.number }}?state={{ s }}"
60 class="milestone-tab{% if issue_state == s %} tab-active{% endif %}"
61 hx-get="{{ base_url }}/milestones/{{ milestone.number }}?state={{ s }}"
62 hx-target="#issue-rows"
63 hx-push-url="true">
64 {{ label }}
65 </a>
66 {% endfor %}
67 </div>
68
69 <div id="issue-rows">
70 {% include "musehub/fragments/milestone_issue_rows.html" %}
71 </div>
72 </div>
73 {% endblock %}