|
|
@@ -767,6 +767,39 @@ with a `BOOTSTRAP_ADMIN` audit row.
|
|
|
JS-built assignment cells (admin "+ Add task" path). Pure
|
|
|
CSS / Twig / vanilla JS — tests untouched at 108 / 281.
|
|
|
|
|
|
+- [x] **Sprint view tabs + smart Close on present** (`2813019`):
|
|
|
+ `/sprints/{id}` is now split into two tabs — "Arbeitstage and
|
|
|
+ capacity" (Arbeitstage matrix + capacity table + the snap/save
|
|
|
+ help line) and "Capacity and tasks" (capacity table + task list
|
|
|
+ + the 100 px popover-anchor spacer). The capacity table was
|
|
|
+ extracted into a `{% macro capacity_table(sprintWorkers,
|
|
|
+ capacity) %}` in `views/sprints/show.twig` and rendered twice via
|
|
|
+ `{{ _self.capacity_table(...) }}`. `sprint-planner.js`'s
|
|
|
+ `recomputeRow` and `applyServerCapacity` switched from `qs`
|
|
|
+ (first match) to `qsa` for the `[data-cap-ressourcen|after-
|
|
|
+ reserves|available]` lookups so both copies update in lockstep
|
|
|
+ on every edit, server response, and boot. A new `initTabs` IIFE
|
|
|
+ in the boot section persists the active tab in localStorage
|
|
|
+ under `sp:{sprintId}:tab` (`:beamer`-namespaced for parity with
|
|
|
+ the other keys, even though the present view has no tab nav).
|
|
|
+ Tab buttons use `data-tab-btn`/`data-tab-panel` plus Tailwind
|
|
|
+ 3.4 `data-[active=true]:` variants for the underline + colour;
|
|
|
+ no JS-driven class toggling needed beyond flipping `data-active`
|
|
|
+ and the `hidden` class on the panels. Default tab is
|
|
|
+ "arbeitstage" — survives until first selection, persists
|
|
|
+ thereafter. The "Present" view's Close button is now smart: a
|
|
|
+ new `initSmartClose` IIFE intercepts the click — if
|
|
|
+ `window.history.length > 1` (the user navigated to the present
|
|
|
+ view within an existing tab), `history.back()`; otherwise
|
|
|
+ `window.close()` with a 100 ms fallback to navigate to
|
|
|
+ `/sprints/{id}` if the browser blocks `close()` (typed-URL or
|
|
|
+ bookmark-opened pages can't always self-close). The link's
|
|
|
+ `href` is preserved as the navigation fallback. Pure Twig +
|
|
|
+ vanilla JS over existing endpoints — no schema, route, or audit
|
|
|
+ changes; CSP unchanged. Tests at 108 / 281 (no PHP touched, no
|
|
|
+ new test surface — same pattern as Phases 10, 13, 14, 15, 16).
|
|
|
+ ACCEPTANCE.md not yet updated for the tab walkthrough.
|
|
|
+
|
|
|
- [x] **Phase 19 — Twig 3 + Tailwind 3 + Alpine CSP + htmx + SortableJS,
|
|
|
jQuery removed** (`75e96e2`). Stack-shift of the entire UI layer
|
|
|
with zero changes to controllers, repositories, schema, capacity
|
|
|
@@ -891,6 +924,7 @@ before acting — nothing here is load-bearing once it grows stale.
|
|
|
## 13. Git history (as of this writing)
|
|
|
|
|
|
```
|
|
|
+2813019 Sprint view: tabs (Arbeitstage / Tasks) + smart Close on present
|
|
|
10ea4b8 Cell popover: replace per-cell status select with slider + status pills
|
|
|
1864835 Fix: filter dropdown close — grace timer for transit gap + close on Clear
|
|
|
9b72c41 Fix: filter dropdowns no longer cropped + close on mouse-leave
|