Repository navigation
Free UI polish batch #273–#278 (tables, filters, primary, progress, copy, chips) - #284
Conversation
- docs/review/pr-284-shots: 38 PNGs + fixtures + DOM dumps proving tables/filters/progress/chips at 1440/1024/782/375 + zoom200 - free-selection.css: contrast comment for chips #3c434a/#e4e4e4 7.9:1 Co-authored-by: ui/batch-273-278
Selection browser journey requires focus return to product search; keep neighbour chip fallback only when search field absent. Refresh #170 proof for free-selection.js. Co-authored-by: ui/batch-273-278 CI fix
selection-browser journey action helper now uses .first() for Approve; count assertion updated to 2 (top + bottom identical forms). Co-authored-by: ui/batch-273-278 CI fix
presentation, recovery, presets, preset-labels all assert Approve count 1 -> 2 for fresh/Repeat/refined previews; action helpers use .first() for the duplicated button. Co-authored-by: ui/batch-273-278 CI fix
…ish check Preview now has 2 identical button-primary elements (top+bottom Approve) for no-JS; other views stay at 1. Bound is 2 only for preview. Co-authored-by: ui/batch-273-278 CI fix
Undo does not reverse: orders, completed sales ... must remain in visible page text (presentation polish moved it to collapsed Details which is not in innerText). Restore inline form while keeping first clause shortened per #277. Co-authored-by: ui/batch-273-278 CI fix
Co-authored-by: ui/batch-273-278 CI fix
Co-authored-by: ui/batch-273-278 CI fix
…suites #275 renders Approve top+bottom (byte-identical POSTs). regression form() helper and Approve tabTo target, exclusions + presets Approve enter targets now use .first(). Co-authored-by: ui/batch-273-278 CI fix
#275 renders two byte-identical approve forms; invariant kept as identical-plan binding instead of single-form count. Co-authored-by: ui/batch-273-278 CI fix
#273 merges Preview before/after into one cell; update the two positional assertions to the 5-col layout (merged cell holds both values incl. absolute target). Co-authored-by: ui/batch-273-278 CI fix
|
@MrDarkRoot — acceptance budget request for PR #284 This PR touches Budget mechanism (from No direct push to main, no self-merge — waiting for your label + green acceptance. |
Plugin Check OutputNotEscaped on render_progress_bar: wrap the data-hook attributes in esc_attr. Refresh #170 source fingerprint.
WriteLeash Free UI polish batch #273–#278
Batch PR containing all 6 presentation-only issues in dependency order. Individual worktrees preserved at /tmp/wl-273 … /tmp/wl-278; this branch
ui/batch-273-278cherry-picks them in order #273 → #274 → #278 → #276 → #275 → #277 with conflicts resolved keeping BOTH intents.Base SHA:
325cbe722f7cc0e7d828a3dd620adbc5cd1244c8(origin/main, verifiedgit fetch origin && git rev-parse origin/mainbefore each subagent).Do NOT merge: single-owner repo, only @MrDarkRoot merges. No self-merge, no auto-merge.
Actual current behavior found (not just issue line numbers)
class-free-admin.php2748 lines:support_details()L1520,render_history_tableL1756,render_preview_viewL2221,render_job_viewL2562 — all confirmed.free-selection.css193 lines:.writeleash-table-scrollL126-130,.widefat table-layout:fixed + min-width:900pxL131-134, padding 16px.free-progress.js189 lines:apply()L95-133; payload had NO numeric totals (only label/summary/notice/poll/rows).free-selection.js133 lines:selectedList()L51-64 full-width<li>+ full.buttonRemove per item.<p class="writeleash-filters">with<strong>/<a class="button">, not subsubsub.button-primarywhile Resume available (reproduced on HEAD).free-selection.js:114still says "Reload if your session expired" — selection search UI, out of ui(free): live progress bar for Apply and Undo on the Progress and results screen #276 scope, left intact.What each issue did
→, Change % folded into Delta secondary line);.writeleash-amountright-align + tabular-nums; sticky thead (top 32px / 46px ≤782px); padding 8-12px; dropped fixed layout/900px (600px narrow-only floor ≤782px documented). Results headers get amount classes only (column count/order/text frozen byfree-progress.jspositional cells +integration.php:698/704).<p>buttons →<ul class="subsubsub writeleash-filters">, 6 li, pipe separators, ONE.current+aria-current="page". URLs/params/fallback byte-identical. Counts SKIPPED (would cost 6 extra COUNT(*) queries; no cheap existing call).aria-label="Remove {name}"), neighbor-focus withpreventScroll:true, count sync. No-JS contract unchanged (selection_action=remove:{id}, native multi-select). ~⅕ height for 10-20 items.#f0f0f1/#2271b1, no gradients) in summary for Apply AND Undo;role=progressbar+ aria-valuemin/max/now; server-rendered static no-JS; JS repaints in poll path; TWO additive intsprogress_total/progress_processed(sole logic exception); hidden on zero/unknown; "Reload…" → "Progress updates automatically." / "Refresh…". Payload diff:+"progress_total": 2, +"progress_processed": 1after"undo_button", before"poll".task_description()+ counts + caveat + SAME form (newrender_approve_form()helper, byte-identical POSTs top+bottom); Undo stays blue/grey. Per-view audit in subagent return.<details>How it works4 steps;support_details()empty-guard + "Support details"→"Details"; L2348→"Changing settings builds a new preview."; L2351→"Approving applies only the prices shown above. …"; L2658 split to short line + Details; undo visible inline per CI-required audit surface. Full copy table + preserved-claims mapping in subagent return.Conflict resolution (kept BOTH intents, never dropped)
#274vs#276: kept.writeleash-progressblock +ul.writeleash-filters.#275vs#276call site:render_undo_section(..., $resume_available)+ "Refresh this job…" wording.#275vs#277preview bottom:$approvable+render_approve_form()+ ui(free): copy and density pass — plain-language strings, collapsed intro, no empty Details toggles #277 short copy.#273vs#277results: short paragraph + Details +writeleash-amountheader classes.Screenshots — committed at
docs/review/pr-284-shots/(not/tmp)All PNGs English, USD, <1 MB, 4:3-ish, no customer data. 38 PNGs (~3 MB) + 3 fixtures + 2 DOM dumps + 106-line README on this branch (direct
git ls-filesproof).pr284-table-1440/1024/782/375-{top,stuck}.png(8) +pr284-table-zoom200-720-{top,stuck}.png(2) +pr284-wl275-preview-1440/1024/782/zoom200.png+pr284-wl275-job-1440/782.png(6) — 16 PNGs 43K–157K; previews the 200% zoom equivalence (720 CSS px ≡ 1440@200%), stickythead top:32px / 46px≤782px, region-only scroll at 375, no page h-scrollNo retained products… colspan=6,Not changed · left the newer value unchanged(CONFLICT),Not restored · preserved the newer value instead of restoring over it(UNDO_CONFLICT), disabled Previous + Next pager linksul.subsubsub.writeleash-filters(6 active states, pipe separators)pr284-filters-all-1440/1024/782.png(3, 92–95K) + cropspr284-filter-{all,conflict,attention,review,undo-conflict,undo-review}-1440.png(6, 11–14K); onea.current[aria-current=page]+li.all/conflict/…+ `render_progress_bar()4 statespr284-progress-all-1440/782/375.png(3, 82–85K) + cropspr284-progress-{apply-mid,apply-finished,undo-mid,undo-hidden}.png(4, 13–16K);data-progress-bar/fill(Apply 1/3 33%, 3/3 100%) +data-progress-undo-bar/fill(Undo 1/4 25%, 0/0 hidden when total <1);role=progressbar aria-valuemin/max/now+aria-label;progress-dom.jsonassertspr284-chips-1440/1024/782/375.png(4, 157–172K) +pr284-chips-list-crop.png(63K) +pr284-chips-fallback-crop.png(46K); flex rowwriteleash-chip__text+writeleash-chip__meta(SKU·ID) + remove × icon; fallback<select multiple id=writeleash-free-products>Fixtures:
fixtures/fixture-{filters,progress,chips}.html+captured.css(repro). Full mapping indocs/review/pr-284-shots/README.md.Changed strings (writeleash domain, for POT refresh)
New/changed:
%s before to after;Planned prices are not guaranteed shopper prices.(standalone);Apply progress,Undo progress;Approved. … Progress updates automatically.;Undo in progress. Progress updates automatically.;Refresh to read the current price;Session or permission expired. Sign in again, then use Refresh saved progress.;This preset changed… Refresh and try again.;security token… Refresh the page…;History is unavailable… Refresh the page…(×2 sites);Saved progress… Refresh this page…;…Refresh this job…; intro lead +How it works+ 4 steps;Details;Changing settings builds a new preview.;Approving applies only the prices shown above. …;Expected and planned are %1$s values.+ Details remainder; undo inline visible per CI audit surface;This stored price format is not supported.Removed originals listed in #277 return.writeleash.potregenerated via wp-cli (20 msgid swaps + Apply/Undo progress labels).Current CI — head
29669358b2(ui/batch-273-278)admin+acceptanceperpath-ownership.json:63(free-selection.css/js,free-progress.js,class-free-admin.php). Needs labelci112:29669358b2bdc3b8bca60182df4b533f2c24535cby @MrDarkRoot. Without it, theacceptance_*matrix (MySQL + MariaDB × default + Redis) is not evaluated — a skip is not a pass.class-product-snapshot.php= 1 hunkinvalid_pricestring-only:The stored price is outside the supported decimal contract.→This stored price format is not supported.Presentation copy per #277, no planner math/eligibility/fingerprint/storage change.php -lclean,i18n-catalog.php 610 PASS.Do NOT merge — only @MrDarkRoot merges. Exact-head hosted Admin + acceptance matrix must show MySQL+MariaDB×default+Redis before merge (acceptance budget label required).