1
0

index.twig 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. {% extends "layout.twig" %}
  2. {% block content %}
  3. <section class="space-y-6">
  4. <header class="flex items-end justify-between gap-4">
  5. <div>
  6. <nav class="text-xs text-slate-500 dark:text-slate-400">
  7. <a href="/" class="hover:underline">Sprints</a> /
  8. </nav>
  9. <h1 class="text-2xl font-semibold tracking-tight">Settings</h1>
  10. <p class="text-slate-600 mt-1 text-sm dark:text-slate-400">
  11. Global flags. Changes take effect on every sprint immediately.
  12. </p>
  13. </div>
  14. </header>
  15. {% if flash is not null %}
  16. <div class="rounded-md border border-green-200 bg-green-50 px-4 py-2 text-sm text-green-800 dark:bg-green-900 dark:border-green-800 dark:text-green-200">
  17. {{ flash }}
  18. </div>
  19. {% endif %}
  20. <form method="post" action="/settings" hx-boost="true" hx-target="body"
  21. class="rounded-lg border bg-white p-5 space-y-4 dark:bg-slate-800 dark:border-slate-700">
  22. <input type="hidden" name="_csrf" value="{{ csrfToken }}">
  23. <h2 class="text-sm font-semibold text-slate-700 uppercase tracking-wider dark:text-slate-200">Features</h2>
  24. <label class="flex items-start gap-3">
  25. <input type="checkbox" name="task_status_enabled" value="1"
  26. {{ values.task_status_enabled|default(false) ? 'checked' : '' }}
  27. class="mt-1 rounded border-slate-300 focus:ring-slate-400 dark:border-slate-600 dark:focus:ring-slate-500">
  28. <span>
  29. <span class="font-medium">{{ keyLabels.task_status_enabled|default('Task status colors') }}</span>
  30. <span class="block text-xs text-slate-500 mt-0.5 dark:text-slate-400">
  31. Show a status selector next to each task-cell day input on every
  32. sprint plan. States: <em>zugewiesen</em> (transparent),
  33. <em>gestartet</em> (yellow), <em>abgeschlossen</em> (green),
  34. <em>abgebrochen</em> (red). Adds a Status filter to the task list.
  35. Any signed-in user can change a cell's status; days remain
  36. admin-only.
  37. </span>
  38. </span>
  39. </label>
  40. <label class="flex items-start gap-3">
  41. <input type="number" name="assignment_slider_max"
  42. min="1" max="100" step="1"
  43. value="{{ values.assignment_slider_max|default(10) }}"
  44. class="mt-1 w-20 rounded border-slate-300 px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-slate-400 dark:bg-slate-800 dark:border-slate-600 dark:text-slate-100 dark:focus:ring-slate-500">
  45. <span>
  46. <span class="font-medium">{{ keyLabels.assignment_slider_max|default('Cell slider max (days)') }}</span>
  47. <span class="block text-xs text-slate-500 mt-0.5 dark:text-slate-400">
  48. Upper bound for the slider in the per-cell popover that opens
  49. when you click a task-day input. Values 1–100. The day input
  50. itself stays unbounded — typing &gt; max is still allowed —
  51. but dragging the slider clamps to this max. Default 10.
  52. </span>
  53. </span>
  54. </label>
  55. <div>
  56. <button type="submit"
  57. class="rounded-md bg-slate-900 text-white px-3 py-2 text-sm font-medium hover:bg-slate-800 dark:bg-slate-700 dark:hover:bg-slate-600">
  58. Save
  59. </button>
  60. </div>
  61. </form>
  62. </section>
  63. {% endblock %}