present.twig 4.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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-reserve-fraction="{{ sprint.reserveFraction|number_format(4, '.', '') }}"
  8. data-beamer="1">
  9. <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">
  10. <div class="flex items-center gap-3">
  11. <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">
  12. <defs>
  13. <radialGradient id="brand-cycle-glow-present" cx="32" cy="32" r="20" gradientUnits="userSpaceOnUse">
  14. <stop offset="0" stop-color="#6366f1" stop-opacity="0.55"/>
  15. <stop offset="0.6" stop-color="#6366f1" stop-opacity="0.12"/>
  16. <stop offset="1" stop-color="#6366f1" stop-opacity="0"/>
  17. </radialGradient>
  18. </defs>
  19. <circle cx="32" cy="32" r="20" fill="url(#brand-cycle-glow-present)"/>
  20. <path d="M52 32 A20 20 0 1 1 32 12" stroke="currentColor" stroke-width="3.5" stroke-linecap="round"/>
  21. <path d="M44 8 L52 12 L48 20" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
  22. <circle cx="32" cy="32" r="5" fill="#6366f1"/>
  23. <circle cx="48" cy="20" r="2.5" fill="currentColor" opacity="0.55"/>
  24. <circle cx="52" cy="40" r="2.5" fill="currentColor" opacity="0.55"/>
  25. <circle cx="40" cy="50" r="2.5" fill="currentColor" opacity="0.55"/>
  26. <circle cx="20" cy="48" r="2.5" fill="currentColor" opacity="0.55"/>
  27. <circle cx="14" cy="32" r="2.5" fill="#10b981"/>
  28. </svg>
  29. <div class="flex items-baseline gap-3">
  30. <h1 class="text-lg font-semibold tracking-tight">{{ sprint.name }}</h1>
  31. <p class="text-slate-600 text-xs dark:text-slate-400">
  32. {{ sprint.startDate }} – {{ sprint.endDate }}
  33. {% if sprint.isArchived %}
  34. · <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>
  35. {% endif %}
  36. </p>
  37. </div>
  38. </div>
  39. <div class="flex items-center gap-3">
  40. <div data-status
  41. 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">
  42. </div>
  43. {% if presentSprintChoices|default([])|length > 1 %}
  44. <label class="sr-only" for="present-sprint-select">Sprint</label>
  45. <select id="present-sprint-select" data-present-sprint-select
  46. 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">
  47. {% for choice in presentSprintChoices %}
  48. <option value="{{ choice.id }}"{% if choice.id == sprint.id %} selected{% endif %}>{{ choice.name }}</option>
  49. {% endfor %}
  50. </select>
  51. {% endif %}
  52. <a href="/sprints/{{ sprint.id }}" data-close-present
  53. 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">
  54. Close
  55. </a>
  56. </div>
  57. </header>
  58. {% if sprintWorkers is empty or weeks is empty %}
  59. <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">
  60. {% if weeks is empty %}
  61. No weeks yet. <a href="/sprints/{{ sprint.id }}/settings" class="underline">Open settings</a> to add some.
  62. {% elseif sprintWorkers is empty %}
  63. No workers on this sprint yet. <a href="/sprints/{{ sprint.id }}/settings" class="underline">Open settings</a> to add some.
  64. {% endif %}
  65. </div>
  66. {% else %}
  67. {% include "sprints/_task_list.twig" with { isBeamer: true } %}
  68. {% endif %}
  69. </main>
  70. {% endblock %}