Reuse istniejacego patternu orders-image-hover-wrap/popup z listy zamowien — wrapper + popup img + JS pozycjonujacy w show.php. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
157 lines
5.1 KiB
Markdown
157 lines
5.1 KiB
Markdown
---
|
|
phase: 54-order-detail-image-hover
|
|
plan: 01
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified:
|
|
- resources/views/orders/show.php
|
|
autonomous: false
|
|
---
|
|
|
|
<objective>
|
|
## Goal
|
|
Dodanie hover-zoom na miniaturkach produktow w widoku szczegolowym zamowienia (/orders/{id}), identycznie jak dziala na liscie zamowien.
|
|
|
|
## Purpose
|
|
Na liscie zamowien po najechaniu na miniaturke produktu pojawia sie powiekszony podglad (350x350px). W widoku szczegolowym zamowienia tego brakuje — uzytkownik nie moze szybko sprawdzic zdjecia produktu.
|
|
|
|
## Output
|
|
- Miniaturki produktow w show.php opakowane w orders-image-hover-wrap
|
|
- Popup powiekszenia na hover (fixed, 350x350)
|
|
- JS pozycjonujacy popup (identyczny z list.php)
|
|
</objective>
|
|
|
|
<context>
|
|
## Project Context
|
|
@.paul/PROJECT.md
|
|
|
|
## Source Files
|
|
@resources/views/orders/show.php
|
|
@resources/views/orders/list.php (referencja — istniejacy hover pattern)
|
|
</context>
|
|
|
|
<acceptance_criteria>
|
|
|
|
## AC-1: Hover zoom na miniaturce
|
|
```gherkin
|
|
Given widok szczegolowy zamowienia z produktem majacym zdjecie
|
|
When uzytkownik najedzie kursorem na miniaturke produktu
|
|
Then obok miniaturki pojawia sie powiekszony podglad (350x350px)
|
|
And podglad znika po zjechaniu kursorem
|
|
```
|
|
|
|
## AC-2: Pozycjonowanie popup
|
|
```gherkin
|
|
Given miniaturka produktu blisko prawej krawedzi ekranu
|
|
When uzytkownik najedzie kursorem
|
|
Then popup pojawia sie po lewej stronie miniaturki (nie wychodzi poza viewport)
|
|
```
|
|
|
|
## AC-3: Brak zdjecia
|
|
```gherkin
|
|
Given produkt bez zdjecia (placeholder)
|
|
When uzytkownik najedzie kursorem
|
|
Then nie pojawia sie zadne powiekszenie (brak popup)
|
|
```
|
|
|
|
</acceptance_criteria>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Dodanie hover wrappera i JS do show.php</name>
|
|
<files>resources/views/orders/show.php</files>
|
|
<action>
|
|
1. Zamien blok img miniaturki (linie 162-163):
|
|
```php
|
|
<img src="<?= $e($media) ?>" alt="" class="order-item-thumb">
|
|
```
|
|
Na wrapper z popup:
|
|
```php
|
|
<span class="orders-image-hover-wrap">
|
|
<img src="<?= $e($media) ?>" alt="" class="order-item-thumb">
|
|
<img src="<?= $e($media) ?>" alt="" class="orders-image-hover-popup">
|
|
</span>
|
|
```
|
|
|
|
2. Na koncu pliku (przed zamykajacym tagiem lub po ostatnim script) dodaj blok JS
|
|
identyczny z tym z list.php — delegowany mouseenter na document
|
|
szukajacy .orders-image-hover-wrap i pozycjonujacy popup:
|
|
```js
|
|
(function () {
|
|
var POPUP_GAP = 12;
|
|
document.addEventListener('mouseenter', function (e) {
|
|
if (!e.target || !e.target.closest) return;
|
|
var wrap = e.target.closest('.orders-image-hover-wrap');
|
|
if (!wrap) return;
|
|
var popup = wrap.querySelector('.orders-image-hover-popup');
|
|
if (!popup) return;
|
|
var rect = wrap.getBoundingClientRect();
|
|
var pw = 350; var ph = 350;
|
|
var left = rect.right + POPUP_GAP;
|
|
if (left + pw > window.innerWidth) left = rect.left - pw - POPUP_GAP;
|
|
var top = rect.top + rect.height / 2 - ph / 2;
|
|
if (top < 4) top = 4;
|
|
if (top + ph > window.innerHeight - 4) top = window.innerHeight - 4 - ph;
|
|
popup.style.left = left + 'px';
|
|
popup.style.top = top + 'px';
|
|
}, true);
|
|
})();
|
|
```
|
|
|
|
Unikaj: duplikowania CSS (style juz istnieja w app.scss)
|
|
Unikaj: zmian w czesci placeholder (order-item-thumb--empty) — tam nie ma zdjecia
|
|
</action>
|
|
<verify>Otworz /orders/117 — najechanie na miniaturke produktu pokazuje powiekszenie</verify>
|
|
<done>AC-1, AC-2, AC-3 satisfied</done>
|
|
</task>
|
|
|
|
<task type="checkpoint:human-verify" gate="blocking">
|
|
<what-built>Hover zoom na miniaturkach produktow w widoku zamowienia</what-built>
|
|
<how-to-verify>
|
|
1. Otworz https://orderpro.projectpro.pl/orders/117
|
|
2. Najedz kursorem na miniaturke produktu w tabeli
|
|
3. Sprawdz: pojawia sie powiekszony podglad (350x350) obok miniaturki
|
|
4. Zjezdzaj kursorem — popup znika
|
|
5. Sprawdz produkt bez zdjecia — brak popupu
|
|
6. Sprawdz przy prawej krawedzi — popup po lewej stronie
|
|
</how-to-verify>
|
|
<resume-signal>Type "approved" to continue, or describe issues to fix</resume-signal>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<boundaries>
|
|
|
|
## DO NOT CHANGE
|
|
- resources/scss/app.scss (style hover juz istnieja)
|
|
- resources/views/orders/list.php (hover tam juz dziala)
|
|
- resources/views/components/ (komponenty wspolne)
|
|
|
|
## SCOPE LIMITS
|
|
- Tylko miniaturki produktow w show.php
|
|
- Nie zmieniaj rozmiaru miniaturek
|
|
- Nie dodawaj hover na mobile (na dotykowych ekranach hover nie dziala)
|
|
|
|
</boundaries>
|
|
|
|
<verification>
|
|
Before declaring plan complete:
|
|
- [ ] Hover zoom dziala na miniaturkach z obrazkiem
|
|
- [ ] Popup pozycjonowany poprawnie (prawo lub lewo)
|
|
- [ ] Brak popup na placeholder (brak zdjecia)
|
|
- [ ] Brak bledow JS w konsoli
|
|
- [ ] Lista zamowien hover nadal dziala
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- Wszystkie 3 acceptance criteria spelnione
|
|
- Identyczne zachowanie jak na liscie zamowien
|
|
- Zero nowych plikow CSS/JS (reuse istniejacych stylow)
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.paul/phases/54-order-detail-image-hover/54-01-SUMMARY.md`
|
|
</output>
|