Files
flowdeck/app/templates/detailed_board.html
T
bruno 3fcc12ad8c feat: sweep complet — tous les émojis → outline SVG icons
Templates modifiés (22 fichiers):
- _icons.html: +14 new icons (paperclip, external-link, sparkles, lightbulb, tag,
  file-text, save, upload, trending-up, zap, alert-triangle, user, eye-off)
- base.html: +8 JS icons, 🦎🐙🔑🔗👁📋🔲📑❓⚠️→SVG
- page_editor.html: 43→0 émojis (📎📄🔒🔗⭐📋📁✨📝🗄📑📊📅🗓🖼📥🌐✏💬💡 etc)
- settings.html: 30→0 (⚙️📋🏷🧩👥💾🙈👁🔒🌙☀️🌳📊📝⚠🦎✅🐙🔗✏🗑)
- local_workspace.html: 25→0 (📄📁✏🗑⚠📋➕)
- gitea_workspace.html: 25→0 (🔗📄📤🔄⚙📁📄🔒✏🗑💾)
- board.html: 13→0 (📁📊📋☰📈👥✕✓🗑⚡🔍)
- workspace.html: 11→0 (🏠🔑⚙📁🔗📂🐙)
- landing.html: 8→0 (📚🚀📝📊🦎🌐🔒⚡)
- trash.html, table_view, dashboard, accounts, card_detail, public_page,
  workspaces, team_load, notes, _header, detailed_board, card, board_fragment
- Ajouté import _icons.html aux fragments standalone
- 143 tests passent
2026-07-21 08:27:10 -04:00

70 lines
3.2 KiB
HTML

<!-- Detailed Board — Notion style with all card properties visible -->
<div id="view-content" class="kanban-container" x-data="kanbanBoard()">
{% set statuses = [('todo', 'To-do', 'var(--gray)'), ('progress', 'In progress', 'var(--blue)'), ('done', 'Complete', 'var(--green)')] %}
{% for status, label, color in statuses %}
<div class="kanban-column">
<div class="kanban-column-header">
<span class="col-dot" style="background: {{ color }};"></span>
{{ label }}
<span class="col-count">{{ groups|map(attribute='counts')|map(attribute=status)|sum }}</span>
</div>
{% for group in groups %}
<div class="kanban-group-header" @click="toggleGroup('{{ group.id }}')">
<span class="group-chevron" :class="{ 'open': !collapsedGroups.includes('{{ group.id }}') }">▶</span>
{{ group.name }}
<span class="group-count">{{ group.counts[status] }}</span>
</div>
<div class="kanban-cards" x-show="!collapsedGroups.includes('{{ group.id }}')"
data-group="{{ group.id }}" data-status="{{ status }}">
{% for card in group.cards if card.status == status %}
<div class="kanban-card card-status-{{ card.status }}"
data-card-id="{{ card.id }}" style="padding: 14px;">
<div class="card-header">
<span class="card-icon">{{ card.icon }}</span>
<span class="card-title" style="font-size:14px; font-weight:600;">{{ card.title }}</span>
</div>
<div class="card-meta" style="flex-direction:column; gap:6px; margin-top:10px;">
{% if card.assignee %}
<div class="card-assignee">
<div class="card-avatar" style="width:22px; height:22px; font-size:11px;">{{ card.assignee[0] }}</div>
<span style="font-size:13px;">{{ card.assignee }}</span>
</div>
{% endif %}
{% if card.tag %}
<div>
<span class="card-tag" style="background:{{ card.tag_color }}20; color:{{ card.tag_color }}; font-size:12px; padding:2px 8px;">
{{ card.tag }}
</span>
</div>
{% endif %}
{% if card.due_date %}
<div class="card-date">
<span>{{ fd_icon("calendar",14) }}</span>
<span style="font-size:12px;">{{ card.due_date }}</span>
</div>
{% endif %}
</div>
<div style="position:absolute; top:8px; right:8px; opacity:0; transition:opacity 0.15s;"
onmouseover="this.style.opacity='1'" onmouseout="this.style.opacity='0'"
onclick="event.stopPropagation(); openCardDetail('{{ card.id }}')">
<button class="item-action-btn" title="Open detail">↗</button>
</div>
</div>
{% endfor %}
<button class="kanban-new-card" @click="newCard('{{ group.id }}', '{{ status }}')">+ New page</button>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
<script>
function openCardDetail(id) {
htmx.ajax('GET', `/api/issues/${owner}/${repo}/${id}?format=html`, {
target: '#card-modal-content', swap: 'innerHTML'
});
document.getElementById('card-modal').style.display = 'flex';
document.getElementById('card-modal-title').textContent = 'Issue #' + id;
}
</script>