Extract partage page chrome to templates/partage/form-page.php

This commit is contained in:
Pontoporeia
2026-06-11 11:29:11 +02:00
parent cbd369bc72
commit b744271cf6
3 changed files with 100 additions and 193 deletions

View File

@@ -0,0 +1,67 @@
<?php
/**
* Partage page chrome — wraps any partage page (form, error, password gate, confirmation).
*
* Required variables:
* string $pageTitle — page <title>
*
* Optional variables:
* bool $includeFilePond — if true, includes FilePond CSS/JS
* array $extraCss — additional CSS files to load
* array $extraJs — additional JS files to load
* ?string $csrfToken — CSRF token for <meta name="csrf-token">
* ?string $filepondBase — FilePond base URL for <meta name="filepond-base">
*/
$includeFilePond = $includeFilePond ?? false;
$extraCss = $extraCss ?? [];
$extraJs = $extraJs ?? [];
$csrfToken = $csrfToken ?? ($_SESSION['csrf_token'] ?? null);
$filepondBase = $filepondBase ?? null;
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= htmlspecialchars($pageTitle ?? 'XAMXAM') ?></title>
<link rel="apple-touch-icon" sizes="152x152" href="/assets/favicon/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="167x167" href="/assets/favicon/apple-touch-icon-167x167.png">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png">
<link rel="shortcut icon" href="/assets/favicon/favicon.ico">
<meta name="theme-color" content="#ffffff">
<?php if ($csrfToken !== null): ?>
<meta name="csrf-token" content="<?= htmlspecialchars($csrfToken) ?>">
<?php endif; ?>
<?php if ($filepondBase !== null): ?>
<meta name="filepond-base" content="<?= htmlspecialchars($filepondBase) ?>">
<?php endif; ?>
<link rel="stylesheet" href="<?= App::assetV('/assets/css/style.css') ?>">
<link rel="stylesheet" href="<?= App::assetV('/assets/css/form-base.css') ?>">
<?php if ($includeFilePond): ?>
<link rel="stylesheet" href="<?= App::assetV('/assets/css/filepond.min.css') ?>">
<link rel="stylesheet" href="<?= App::assetV('/assets/css/filepond-plugin-image-preview.min.css') ?>">
<?php endif; ?>
<?php foreach ($extraCss as $css): ?>
<link rel="stylesheet" href="<?= App::assetV($css) ?>">
<?php endforeach; ?>
<?php if ($includeFilePond): ?>
<script src="<?= App::assetV('/assets/js/vendor/filepond.min.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/vendor/filepond-plugin-file-validate-type.min.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/vendor/filepond-plugin-file-validate-size.min.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/vendor/filepond-plugin-image-preview.min.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/vendor/filepond-plugin-image-exif-orientation.min.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/app/file-upload-filepond.js') ?>" defer></script>
<?php endif; ?>
<script src="<?= App::assetV('/assets/js/app/beforeunload-guard.js') ?>" defer></script>
<?php if ($includeFilePond): ?>
<script src="<?= App::assetV('/assets/js/app/pill-search.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/app/jury-autocomplete.js') ?>" defer></script>
<script src="<?= App::assetV('/assets/js/vendor/htmx.min.js') ?>" defer></script>
<?php endif; ?>
<?php foreach ($extraJs as $js): ?>
<script src="<?= App::assetV($js) ?>" defer></script>
<?php endforeach; ?>
</head>
<body class="student-body">