mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
test: add ShareLinkTest + PureLogicTest (TDD), fix coverMap undefined in SearchController
This commit is contained in:
@@ -15,12 +15,14 @@
|
||||
* bool $required — whether at least one checkbox must be checked; default false
|
||||
* string $hxPost — optional hx-post URL for HTMX live update
|
||||
* string $hxTarget — optional hx-target CSS selector for HTMX swap
|
||||
* string $hxSwap — optional hx-swap value; default 'outerHTML'
|
||||
*/
|
||||
|
||||
$checked = $checked ?? [];
|
||||
$required = $required ?? false;
|
||||
$hxPost = $hxPost ?? '';
|
||||
$hxTarget = $hxTarget ?? '';
|
||||
$hxSwap = $hxSwap ?? 'outerHTML';
|
||||
?>
|
||||
<div>
|
||||
<span class="admin-row-label"><?= htmlspecialchars($label) ?><?= $required ? ' <span class="asterisk">*</span>' : '' ?></span>
|
||||
@@ -31,7 +33,7 @@ $hxTarget = $hxTarget ?? '';
|
||||
hx-target="<?= htmlspecialchars($hxTarget) ?>"
|
||||
hx-trigger="change"
|
||||
hx-include="this, #website-url-fieldset"
|
||||
hx-swap="outerHTML"
|
||||
hx-swap="<?= htmlspecialchars($hxSwap) ?>"
|
||||
<?php endif; ?>>
|
||||
<legend class="sr-only"><?= htmlspecialchars($label) ?></legend>
|
||||
<ul>
|
||||
@@ -50,4 +52,4 @@ $hxTarget = $hxTarget ?? '';
|
||||
</fieldset>
|
||||
</div>
|
||||
<?php
|
||||
unset($checked, $hxPost, $hxTarget);
|
||||
unset($checked, $hxPost, $hxTarget, $hxSwap);
|
||||
|
||||
@@ -132,7 +132,7 @@ $checkedFormatsForSiteWeb = $checkedFormatsForSiteWeb ?? [];
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?= $formAction ?>" method="post" enctype="multipart/form-data" class="admin-form"<?= $mode === 'edit' ? ' data-beforeunload-guard' : '' ?>>
|
||||
<form action="<?= $formAction ?>" method="post" enctype="multipart/form-data" class="admin-form" data-beforeunload-guard>
|
||||
<?= $hiddenFields ?>
|
||||
|
||||
<p class="required-note"><span class="asterisk">*</span> Champs obligatoires</p>
|
||||
@@ -173,50 +173,31 @@ $checkedFormatsForSiteWeb = $checkedFormatsForSiteWeb ?? [];
|
||||
$options = $languages;
|
||||
$checked = $formData["languages"] ?? [];
|
||||
$required = true;
|
||||
$hxPost = "/language-autre-fragment.php";
|
||||
$hxTarget = "#language-autre-row";
|
||||
$hxSwap = "outerHTML";
|
||||
include APP_ROOT . "/templates/partials/form/checkbox-list.php";
|
||||
unset($hxSwap);
|
||||
?>
|
||||
<?php
|
||||
$name = "language_autre";
|
||||
$label = "Autre(s) langue(s) :";
|
||||
$value = $oldFn("language_autre");
|
||||
$required = empty($formData["languages"]);
|
||||
$hint =
|
||||
"Si votre TFE contient une langue absente de la liste, précisez-la ici.";
|
||||
include APP_ROOT . "/templates/partials/form/text-field.php";
|
||||
$_langAutreRequired = empty($formData["languages"]);
|
||||
$_langAutreValue = $oldFn("language_autre");
|
||||
?>
|
||||
<div id="language-autre-row">
|
||||
<div>
|
||||
<label for="language_autre">Autre(s) langue(s) :<?= $_langAutreRequired ? ' <span class="asterisk">*</span>' : '' ?></label>
|
||||
<div>
|
||||
<input type="text"
|
||||
id="language_autre"
|
||||
name="language_autre"
|
||||
value="<?= $_langAutreValue ?>"
|
||||
<?= $_langAutreRequired ? 'required' : '' ?>>
|
||||
<small>Si votre TFE contient une langue absente de la liste, précisez-la ici.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php unset($_langAutreRequired, $_langAutreValue); ?>
|
||||
</fieldset>
|
||||
<script>
|
||||
(function () {
|
||||
var fs = document.getElementById('languages-fieldset');
|
||||
if (!fs) return;
|
||||
var autreInput = fs.querySelector('input[name="language_autre"]');
|
||||
if (!autreInput) return;
|
||||
var autreLabel = fs.querySelector('label[for="language_autre"]');
|
||||
function update() {
|
||||
var anyChecked = fs.querySelectorAll('input[name="languages[]"]').length > 0
|
||||
? Array.from(fs.querySelectorAll('input[name="languages[]"]')).some(function(cb){ return cb.checked; })
|
||||
: false;
|
||||
autreInput.required = !anyChecked;
|
||||
if (autreLabel) {
|
||||
var star = autreLabel.querySelector('.asterisk');
|
||||
if (!anyChecked && !star) {
|
||||
var s = document.createElement('span');
|
||||
s.className = 'asterisk';
|
||||
s.textContent = '*';
|
||||
autreLabel.appendChild(document.createTextNode(' '));
|
||||
autreLabel.appendChild(s);
|
||||
} else if (anyChecked && star) {
|
||||
star.previousSibling && star.previousSibling.nodeType === 3 && star.previousSibling.remove();
|
||||
star.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
fs.addEventListener('change', function(e) {
|
||||
if (e.target && e.target.name === 'languages[]') update();
|
||||
});
|
||||
update();
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- ═══════════════════ Mots-clés ═══════════════════ -->
|
||||
<fieldset>
|
||||
|
||||
Reference in New Issue
Block a user