mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
- Fix 413 Request Entity Too Large: bump client_max_body_size to 256M, PHP post_max_size/upload_max_filesize to 256M, fastcgi timeouts to 300s - Fix missing v_smtp_active view: add IF NOT EXISTS to all CREATE VIEW statements in schema.sql for idempotent migrates - Fix bars.svg 404: create animated SVG spinner in app/public/assets/img/ - Fix nginx rate limiting: increase admin zone from 60r/m (1 r/s) to 300r/m (5 r/s) with burst=30 to handle ~11 concurrent HTMX fragment GETs on contenus.php page load - Add deploy-nginx recipe to justfile for uploading nginx config to server - Database readonly issue mitigated by existing --chown + deploy-server.sh permissions fix - Add comprehensive PHP/JS debugging logs for settings checkboxes: per-field raw POST values in error_log, console.log on htmx:beforeSend, htmx:sendError, htmx:afterRequest, toast lifecycle - Fix toast auto-remove script: use getElementById with unique ID instead of querySelector which could remove wrong toast on rapid clicks
36 lines
1.3 KiB
PHP
36 lines
1.3 KiB
PHP
<!-- Toast region — polled by HTMX after page load -->
|
|
<aside id="toast-region"
|
|
aria-live="polite"
|
|
hx-get="/admin/toast-fragment.php"
|
|
hx-trigger="load"
|
|
hx-swap="innerHTML"
|
|
hx-target="#toast-region">
|
|
</aside>
|
|
|
|
<?php foreach ($extraJs ?? [] as $js): ?>
|
|
<script src="<?= App::assetV($js) ?>"></script>
|
|
<?php endforeach; ?>
|
|
<?php if (!empty($extraJsInline)): ?>
|
|
<script><?= $extraJsInline ?></script>
|
|
<?php endif; ?>
|
|
<script src="/assets/js/htmx.min.js"></script>
|
|
<script>
|
|
// Global HTMX debugging for settings checkboxes
|
|
document.body.addEventListener('htmx:sendError', function (e) {
|
|
console.error('[htmx:sendError] target=', e.target.id, 'detail=', e.detail);
|
|
});
|
|
document.body.addEventListener('htmx:beforeSend', function (e) {
|
|
if (e.target.id && (e.target.id.includes('fieldset-') || e.target.name)) {
|
|
console.log('[htmx:beforeSend] name=' + e.target.name + ' checked=' + e.target.checked, 'formData keys:', Array.from(new FormData(e.target.closest('fieldset'))).map(function(kv){return kv[0]}));
|
|
}
|
|
});
|
|
document.body.addEventListener('htmx:afterSettle', function (e) {
|
|
if (e.target && e.target.id === 'toast-region') {
|
|
var warn = e.target.querySelector('.toast--warning');
|
|
if (warn) { warn.setAttribute('tabindex', '-1'); warn.focus(); }
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|