1
0

present.twig 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. {% extends "layout-bare.twig" %}
  2. {% block content %}
  3. <main class="min-h-screen w-screen overflow-hidden beamer-root"
  4. data-sprint-root
  5. data-sprint-id="{{ sprint.id }}"
  6. data-csrf="{{ csrfToken }}"
  7. data-beamer="1">
  8. <header class="flex items-center justify-between gap-4 px-4 py-2 border-b bg-slate-50 dark:bg-slate-800 dark:border-slate-700">
  9. <div class="flex items-center gap-3">
  10. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="24" height="24" aria-hidden="true" class="block shrink-0" fill="none">
  11. <defs>
  12. <radialGradient id="brand-cycle-glow-present" cx="32" cy="32" r="20" gradientUnits="userSpaceOnUse">
  13. <stop offset="0" stop-color="#6366f1" stop-opacity="0.55"/>
  14. <stop offset="0.6" stop-color="#6366f1" stop-opacity="0.12"/>
  15. <stop offset="1" stop-color="#6366f1" stop-opacity="0"/>
  16. </radialGradient>
  17. </defs>
  18. <circle cx="32" cy="32" r="20" fill="url(#brand-cycle-glow-present)"/>
  19. <path d="M52 32 A20 20 0 1 1 32 12" stroke="currentColor" stroke-width="3.5" stroke-linecap="round"/>
  20. <path d="M44 8 L52 12 L48 20" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
  21. <circle cx="32" cy="32" r="5" fill="#6366f1"/>
  22. <circle cx="48" cy="20" r="2.5" fill="currentColor" opacity="0.55"/>
  23. <circle cx="52" cy="40" r="2.5" fill="currentColor" opacity="0.55"/>
  24. <circle cx="40" cy="50" r="2.5" fill="currentColor" opacity="0.55"/>
  25. <circle cx="20" cy="48" r="2.5" fill="currentColor" opacity="0.55"/>
  26. <circle cx="14" cy="32" r="2.5" fill="#10b981"/>
  27. </svg>
  28. <div class="flex items-baseline gap-3">
  29. <h1 class="text-lg font-semibold tracking-tight">{{ sprint.name }}</h1>
  30. <p class="text-slate-600 text-xs dark:text-slate-400">
  31. {{ sprint.startDate }} – {{ sprint.endDate }}
  32. {% if sprint.isArchived %}
  33. · <span class="inline-block px-1.5 py-0.5 text-[10px] bg-slate-200 text-slate-600 rounded dark:bg-slate-700 dark:text-slate-300">archived</span>
  34. {% endif %}
  35. </p>
  36. </div>
  37. </div>
  38. <div class="flex items-center gap-3">
  39. <div data-status
  40. class="text-xs border rounded px-2 py-0.5 opacity-0 transition-opacity duration-200 border-slate-200 bg-slate-50 text-slate-700 dark:bg-slate-800 dark:border-slate-700 dark:text-slate-300">
  41. </div>
  42. {% if presentSprintChoices|default([])|length > 1 %}
  43. <label class="sr-only" for="present-sprint-select">Sprint</label>
  44. <select id="present-sprint-select" data-present-sprint-select
  45. class="rounded-md border border-slate-300 bg-white text-slate-700 px-2 py-1 text-sm hover:bg-slate-100 dark:bg-slate-800 dark:border-slate-600 dark:text-slate-200 dark:hover:bg-slate-700">
  46. {% for choice in presentSprintChoices %}
  47. <option value="{{ choice.id }}"{% if choice.id == sprint.id %} selected{% endif %}>{{ choice.name }}</option>
  48. {% endfor %}
  49. </select>
  50. {% endif %}
  51. <a href="/sprints/{{ sprint.id }}" data-close-present
  52. class="inline-flex items-center gap-2 rounded-md border border-slate-300 bg-white text-slate-700 px-3 py-1 text-sm hover:bg-slate-100 dark:bg-slate-800 dark:border-slate-600 dark:text-slate-200 dark:hover:bg-slate-700">
  53. Close
  54. </a>
  55. </div>
  56. </header>
  57. {% if sprintWorkers is empty or weeks is empty %}
  58. <div class="m-4 rounded-md border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900 dark:bg-amber-900 dark:border-amber-800 dark:text-amber-200">
  59. {% if weeks is empty %}
  60. No weeks yet. <a href="/sprints/{{ sprint.id }}/settings" class="underline">Open settings</a> to add some.
  61. {% elseif sprintWorkers is empty %}
  62. No workers on this sprint yet. <a href="/sprints/{{ sprint.id }}/settings" class="underline">Open settings</a> to add some.
  63. {% endif %}
  64. </div>
  65. {% else %}
  66. {% include "sprints/_task_list.twig" with { isBeamer: true } %}
  67. {% endif %}
  68. </main>
  69. {% endblock %}