feat: v0.5.0→v0.8.0 — multi-vues, filtres, tri, modale, checklists
v0.5.0 (Kanban complet):
- Card detail modal avec checklists + commentaires Gitea
- Création d'issues inline (formulaire + POST /api/issues)
- Édition inline (contenteditable)
v0.6.0 (Table view):
- table_view.html: colonnes Name/Status/Assign/Deadline/Team/Keywords
- Tri par colonne (clic en-tête, asc/desc)
- Groupes rétractables (Design/Engineering)
v0.7.0 (Filtres & Tri):
- Filtres cumulables AND (backend _apply_filters + UI pastilles)
- Status dropdown avec checkboxes + dots colorés
- Sort panel multi-critères (+ Add sort / Delete sort)
- Backend _apply_sorts avec asc/desc
v0.8.0 (Vues spéciales):
- status_overview.html: SVG donut chart + légende + pourcentages
- team_load.html: barres empilées par avatar
- detailed_board.html: cartes avec toutes propriétés
Backend:
- /board/{o}/{r}/view/{view} — 5 fragments HTMX
- /api/issues/{o}/{r}/{id}?format=html — modal HTML
- _map_issue_to_card, STATUS_COLORS/LABELS exportés
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<!-- Team Load — Notion-style stacked bar chart -->
|
||||
<div id="view-content" x-data="teamLoad()" class="team-load">
|
||||
{% for member in team_data %}
|
||||
<div class="team-member">
|
||||
<div class="team-count">{{ member.total }}</div>
|
||||
<div class="team-bar-stack" style="height: {{ member.total * 32 }}px; min-height: 40px;">
|
||||
{% if member.complete > 0 %}
|
||||
<div class="team-bar-segment done"
|
||||
style="height: {{ (member.complete / member.total * 100)|round }}%;"
|
||||
title="Complete: {{ member.complete }}"></div>
|
||||
{% endif %}
|
||||
{% if member.progress > 0 %}
|
||||
<div class="team-bar-segment progress"
|
||||
style="height: {{ (member.progress / member.total * 100)|round }}%;"
|
||||
title="In progress: {{ member.progress }}"></div>
|
||||
{% endif %}
|
||||
{% if member.todo > 0 %}
|
||||
<div class="team-bar-segment todo"
|
||||
style="height: {{ (member.todo / member.total * 100)|round }}%;"
|
||||
title="To-do: {{ member.todo }}"></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="team-avatar" title="{{ member.name }}">{{ member.initial }}</div>
|
||||
<div style="font-size:12px; color:var(--text-secondary); text-align:center; max-width:60px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">
|
||||
{{ member.name }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% if not team_data %}
|
||||
<div style="text-align:center; padding:48px; width:100%; color:var(--text-dim);">
|
||||
<div style="font-size:48px; margin-bottom:16px;">👥</div>
|
||||
<h3>No team data</h3>
|
||||
<p style="margin-top:8px;">Assign issues to team members to see their workload.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="status-legend" style="justify-content:center; padding: 0 24px 24px;">
|
||||
<div class="legend-item"><span class="legend-dot" style="background:var(--blue);"></span> To-do</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:var(--orange);"></span> In progress</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:var(--green);"></span> Complete</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function teamLoad() {
|
||||
return {};
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user