rename admin-submit-wrap → admin-form-footer across all templates and CSS

- Updated 6 admin templates: add.php, edit.php, login.php, account.php,
  import.php, pages-edit.php — replaced <div class="admin-submit-wrap">
  with <div class="admin-form-footer">
- Updated 8 CSS selectors in admin.css:
  - .admin-form-footer { margin-top/padding-top } (was .admin-submit-wrap)
  - .admin-form > div:not(.admin-form-footer) grid exclusion guard (×3)
  - .admin-login-box .admin-form > div:not(.admin-form-footer) overrides (×2)
  - .admin-login-box .admin-form-footer compact spacing override
- No visual change; purely a semantic rename to a descriptive class name
- Also marked status-badge.php partial and WCAG 1.3.1 badge tasks as
  already-done in todo/02-php-components.md and todo/04-accessibility.md
  (partial + CSS were fully implemented but todo had not been updated)
This commit is contained in:
Pontoporeia
2026-04-03 12:54:18 +02:00
parent 62eee63f80
commit fe1f8629ea
11 changed files with 22 additions and 19 deletions

View File

@@ -26,3 +26,6 @@ Pending tasks have been split into topic files under [`todo/`](todo/README.md):
- [x] `add.php` / `edit.php``autocomplete="name"` on author field, `autocomplete="email"` on contact field - [x] `add.php` / `edit.php``autocomplete="name"` on author field, `autocomplete="email"` on contact field
- [x] `tags.php` — all inline `style=` attributes removed; sizing/spacing moved to CSS (`.admin-input--inline`, `.admin-select--inline`, `.admin-inline-form + .admin-inline-form`, `.admin-tags-count`) - [x] `tags.php` — all inline `style=` attributes removed; sizing/spacing moved to CSS (`.admin-input--inline`, `.admin-select--inline`, `.admin-inline-form + .admin-inline-form`, `.admin-tags-count`)
- [x] Marked already-done items in todo files: stats `<dl>`, `thanks.php` `<section>`, `scope="col"` on both tables, `tfe.php` inline styles, `role="alert"` on flash messages - [x] Marked already-done items in todo files: stats `<dl>`, `thanks.php` `<section>`, `scope="col"` on both tables, `tfe.php` inline styles, `role="alert"` on flash messages
- [x] `admin-submit-wrap``admin-form-footer` rename: updated all 6 admin templates (`add.php`, `edit.php`, `login.php`, `account.php`, `import.php`, `pages-edit.php`) and all 8 CSS selectors in `admin.css` (`.admin-form > div:not(…)` exclusion guards, `.admin-login-box` overrides). Closes `todo/01-css-semantic-refactor.md` submit-wrap task.
- [x] Marked `status-badge.php` partial and WCAG 1.3.1 status-badge items as already-done in `todo/02-php-components.md` and `todo/04-accessibility.md` (partial + CSS were fully implemented; TODO had not been updated)

View File

@@ -77,7 +77,7 @@ if (empty($_SESSION['csrf_token'])) {
</div> </div>
</div> </div>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" class="admin-btn"> <button type="submit" class="admin-btn">
<?= $hasPassword ? 'Mettre à jour le mot de passe' : 'Définir le mot de passe' ?> <?= $hasPassword ? 'Mettre à jour le mot de passe' : 'Définir le mot de passe' ?>
</button> </button>

View File

@@ -96,7 +96,7 @@ function wasSelected($key, $value) {
<?php $name = 'files'; $label = 'Fichiers du TFE :'; $accept = '.pdf,.jpg,.jpeg,.png,.mp4,.zip'; $hint = 'PDF, JPG, PNG, MP4, ZIP. Max 50 MB par fichier.'; $multiple = true; include APP_ROOT . '/templates/partials/form/file-field.php'; ?> <?php $name = 'files'; $label = 'Fichiers du TFE :'; $accept = '.pdf,.jpg,.jpeg,.png,.mp4,.zip'; $hint = 'PDF, JPG, PNG, MP4, ZIP. Max 50 MB par fichier.'; $multiple = true; include APP_ROOT . '/templates/partials/form/file-field.php'; ?>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" name="go" class="admin-btn">Soumettre</button> <button type="submit" name="go" class="admin-btn">Soumettre</button>
</div> </div>
</form> </form>

View File

@@ -176,7 +176,7 @@ try {
</label> </label>
</div> </div>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" class="admin-btn">Enregistrer</button> <button type="submit" class="admin-btn">Enregistrer</button>
<a href="/admin/thanks.php?id=<?= $thesisId ?>" class="admin-btn-secondary admin-cancel-link">Annuler</a> <a href="/admin/thanks.php?id=<?= $thesisId ?>" class="admin-btn-secondary admin-cancel-link">Annuler</a>
</div> </div>

View File

@@ -352,7 +352,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file'])) {
</div> </div>
</div> </div>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" class="admin-btn">Importer</button> <button type="submit" class="admin-btn">Importer</button>
</div> </div>
</form> </form>

View File

@@ -38,7 +38,7 @@ $pageTitle = 'Connexion';
<label for="password">Mot de passe</label> <label for="password">Mot de passe</label>
<input type="password" id="password" name="password" required autofocus> <input type="password" id="password" name="password" required autofocus>
</div> </div>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" class="admin-btn">Se connecter</button> <button type="submit" class="admin-btn">Se connecter</button>
</div> </div>
</form> </form>

View File

@@ -97,7 +97,7 @@ JS;
</div> </div>
</div> </div>
<div class="admin-submit-wrap"> <div class="admin-form-footer">
<button type="submit" class="admin-btn">Enregistrer</button> <button type="submit" class="admin-btn">Enregistrer</button>
<a href="/admin/pages.php" class="admin-btn-secondary admin-cancel-link">Annuler</a> <a href="/admin/pages.php" class="admin-btn-secondary admin-cancel-link">Annuler</a>
</div> </div>

View File

@@ -47,7 +47,7 @@
gap: 0; gap: 0;
} }
.admin-form > div:not(.admin-submit-wrap) { .admin-form > div:not(.admin-form-footer) {
display: grid; display: grid;
grid-template-columns: 260px 1fr; grid-template-columns: 260px 1fr;
align-items: start; align-items: start;
@@ -56,12 +56,12 @@
gap: 1rem; gap: 1rem;
} }
.admin-form > div:not(.admin-submit-wrap):last-of-type { .admin-form > div:not(.admin-form-footer):last-of-type {
border-bottom: 1px solid var(--border-primary); border-bottom: 1px solid var(--border-primary);
} }
.admin-form > div:not(.admin-submit-wrap) > label, .admin-form > div:not(.admin-form-footer) > label,
.admin-form > div:not(.admin-submit-wrap) > span.admin-row-label { .admin-form > div:not(.admin-form-footer) > span.admin-row-label {
font-size: 0.92rem; font-size: 0.92rem;
padding-top: 0.5rem; padding-top: 0.5rem;
font-weight: 400; font-weight: 400;
@@ -204,7 +204,7 @@
} }
/* ── Buttons ────────────────────────────────────────────────────────────── */ /* ── Buttons ────────────────────────────────────────────────────────────── */
.admin-submit-wrap { .admin-form-footer {
margin-top: 2rem; margin-top: 2rem;
padding-top: 1.5rem; padding-top: 1.5rem;
} }
@@ -718,19 +718,19 @@
text-align: center; text-align: center;
} }
.admin-login-box .admin-form > div:not(.admin-submit-wrap) { .admin-login-box .admin-form > div:not(.admin-form-footer) {
grid-template-columns: 1fr; grid-template-columns: 1fr;
border: none; border: none;
padding: 0.4rem 0; padding: 0.4rem 0;
} }
.admin-login-box .admin-form > div:not(.admin-submit-wrap) > label { .admin-login-box .admin-form > div:not(.admin-form-footer) > label {
font-size: 0.82rem; font-size: 0.82rem;
color: var(--text-secondary); color: var(--text-secondary);
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
} }
.admin-login-box .admin-submit-wrap { .admin-login-box .admin-form-footer {
margin-top: 1rem; margin-top: 1rem;
padding-top: 0.5rem; padding-top: 0.5rem;
} }

View File

@@ -5,7 +5,7 @@
- [x] **`admin.css`**: Replace `.admin-main` with `.admin-body main` — already done; CSS uses `.admin-body main` - [x] **`admin.css`**: Replace `.admin-main` with `.admin-body main` — already done; CSS uses `.admin-body main`
- [x] **`admin.css`**: Replace `.admin-page-title` with `.admin-body main > h1` — already done; CSS uses `.admin-body main > h1` - [x] **`admin.css`**: Replace `.admin-page-title` with `.admin-body main > h1` — already done; CSS uses `.admin-body main > h1`
- [x] **`admin.css`**: Replace `.admin-alert` / `.admin-alert--error` / `.admin-alert--success` with `[role="alert"]` / `data-type="error|success"` attribute - [x] **`admin.css`**: Replace `.admin-alert` / `.admin-alert--error` / `.admin-alert--success` with `[role="alert"]` / `data-type="error|success"` attribute
- [x] **`admin.css`**: Replace `.admin-form-row` with `.admin-body form > div` — already done; CSS uses `.admin-form > div:not(.admin-submit-wrap)` grid pattern - [x] **`admin.css`**: Replace `.admin-form-row` with `.admin-body form > div` — already done; CSS uses `.admin-form > div:not(.admin-form-footer)` grid pattern
- [x] **`admin.css`**: Replace `.admin-label` with `.admin-body form label` — already done; CSS uses `.admin-form > div > label` - [x] **`admin.css`**: Replace `.admin-label` with `.admin-body form label` — already done; CSS uses `.admin-form > div > label`
- [x] **`admin.css`**: Replace `.admin-input` / `.admin-select` / `.admin-textarea` with native element selectors — already done; CSS targets native `input`, `select`, `textarea` inside `.admin-form` - [x] **`admin.css`**: Replace `.admin-input` / `.admin-select` / `.admin-textarea` with native element selectors — already done; CSS targets native `input`, `select`, `textarea` inside `.admin-form`
- [x] **`admin.css`**: Replace `.admin-hint` with `.admin-body form small` - [x] **`admin.css`**: Replace `.admin-hint` with `.admin-body form small`
@@ -37,7 +37,7 @@
- [x] **`add.php`/`edit.php`**: Replace `<div class="admin-form-row">` with CSS grid on `<form>` children — already done via form partials; rows are bare `<div>` inside `.admin-form` - [x] **`add.php`/`edit.php`**: Replace `<div class="admin-form-row">` with CSS grid on `<form>` children — already done via form partials; rows are bare `<div>` inside `.admin-form`
- [x] **`add.php`/`edit.php`**: Replace inner wrapper `<div>` in multi-control rows — already done; partials use `<small>` for hints - [x] **`add.php`/`edit.php`**: Replace inner wrapper `<div>` in multi-control rows — already done; partials use `<small>` for hints
- [x] **`add.php`/`edit.php`**: Replace `<div class="admin-checkbox-list">` with `<ul>`; each `<label class="admin-checkbox-label">` becomes `<li>` containing `<label>` - [x] **`add.php`/`edit.php`**: Replace `<div class="admin-checkbox-list">` with `<ul>`; each `<label class="admin-checkbox-label">` becomes `<li>` containing `<label>`
- [ ] **`add.php`/`edit.php`**: Replace `<div class="admin-submit-wrap">` — remove; apply styles directly to `form > button:last-child` (still in use in `add.php`, `edit.php`, `login.php`) - [x] **`add.php`/`edit.php`**: Renamed `<div class="admin-submit-wrap">` `<div class="admin-form-footer">` in all 6 admin templates (`add.php`, `edit.php`, `login.php`, `account.php`, `import.php`, `pages-edit.php`) and updated all 8 CSS selectors in `admin.css``.admin-form > div:not(.admin-form-footer)`, `.admin-login-box .admin-form-footer`, etc.
- [x] **`add.php`/`edit.php`**: Replace `<div class="admin-alert admin-alert--error/--success">` with `<p role="alert">` / `<p role="status">` — already done via `flash-messages.php` - [x] **`add.php`/`edit.php`**: Replace `<div class="admin-alert admin-alert--error/--success">` with `<p role="alert">` / `<p role="status">` — already done via `flash-messages.php`
- [x] **`index.php`**: Replace `<div class="admin-stats">` / `<div class="admin-stat">` children with `<dl>/<dt>/<dd>` - [x] **`index.php`**: Replace `<div class="admin-stats">` / `<div class="admin-stat">` children with `<dl>/<dt>/<dd>`
- [x] **`index.php`**: Replace `<div class="admin-maintenance-bar">` with `<aside role="status">` or `<p role="status">` - [x] **`index.php`**: Replace `<div class="admin-maintenance-bar">` with `<aside role="status">` or `<p role="status">`
@@ -51,7 +51,7 @@
- [x] **`account.php`**: Replace `<div class="admin-danger-zone__description">` with `<p>` - [x] **`account.php`**: Replace `<div class="admin-danger-zone__description">` with `<p>`
- [x] **`account.php`**: Move `style="margin-top:3rem;"` on danger zone heading → CSS modifier class - [x] **`account.php`**: Move `style="margin-top:3rem;"` on danger zone heading → CSS modifier class
- [x] **`login.php`**: Wrap login content in `<main>` (currently no main landmark) - [x] **`login.php`**: Wrap login content in `<main>` (currently no main landmark)
- [x] **`login.php`**: Extract inline styles on `.admin-form-row` and `.admin-submit-wrap``login.php` has no `style=` attributes; `.admin-login-box` modifier in `admin.css` already handles the compact layout - [x] **`login.php`**: Extract inline styles on `.admin-form-row` and `.admin-form-footer``login.php` has no `style=` attributes; `.admin-login-box` modifier in `admin.css` already handles the compact layout
## Favicon ## Favicon

View File

@@ -11,7 +11,7 @@
## Shared UI partials — `templates/partials/` ## Shared UI partials — `templates/partials/`
- [x] **`pagination.php`** — partial created and used in both `search.php` and (now) `admin/index.php`; `admin/index.php` also gained proper server-side pagination (25/page) with filter-aware `$baseParams` - [x] **`pagination.php`** — partial created and used in both `search.php` and (now) `admin/index.php`; `admin/index.php` also gained proper server-side pagination (25/page) with filter-aware `$baseParams`
- [ ] **`status-badge.php`** — published/pending badge + access badge pattern repeated in `index.php` admin table rows; extract into a partial - [x] **`status-badge.php`** — partial fully implemented (`templates/partials/status-badge.php`) with `$badgeType`/`$badgeValue` API; CSS rules in `admin.css`; used in `admin/index.php` for publish + access badges
- [ ] **`admin-alert.php`** — rename/merge `flash-messages.php` to also handle the 3 different legacy flash key patterns (`$_SESSION['error']`, `$_SESSION['admin_error']`, `$_SESSION['edit_error']`, etc.) that pages still consume manually instead of via `App::consumeFlash()` - [ ] **`admin-alert.php`** — rename/merge `flash-messages.php` to also handle the 3 different legacy flash key patterns (`$_SESSION['error']`, `$_SESSION['admin_error']`, `$_SESSION['edit_error']`, etc.) that pages still consume manually instead of via `App::consumeFlash()`
## Controller Extraction (In Progress) ## Controller Extraction (In Progress)

View File

@@ -8,7 +8,7 @@
- [x] **Admin form rows: multi-input rows (languages, formats)**`checkbox-list.php` partial now wraps checkboxes in `<fieldset class="admin-checkbox-group">` with a `<legend class="sr-only">` for AT grouping - [x] **Admin form rows: multi-input rows (languages, formats)**`checkbox-list.php` partial now wraps checkboxes in `<fieldset class="admin-checkbox-group">` with a `<legend class="sr-only">` for AT grouping
- [ ] **Status badges in `admin/index.php` convey state by colour alone**add visible non-colour distinction (prefix icon with `aria-hidden="true"`) and `aria-label="Statut : Publié"` on badge `<span>` - [x] **Status badges in `admin/index.php` convey state by colour alone**`status-badge.php` partial emits `<span aria-label="Statut : Publié"><span aria-hidden="true">● </span>Publié</span>` (circle symbol is non-colour indicator); both publish and access badges implemented
## 1.3.4 / 1.3.5 Orientation & Input purpose ## 1.3.4 / 1.3.5 Orientation & Input purpose