|
31 | 31 | <!-- Chart.js for stats page --> |
32 | 32 | <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"></script> |
33 | 33 |
|
| 34 | + <!-- Flatpickr for datetime inputs --> |
| 35 | + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/flatpickr.min.css"> |
| 36 | + <script src="https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/flatpickr.min.js"></script> |
| 37 | + |
34 | 38 | <style> |
35 | 39 | :root { |
36 | 40 | --queue-primary: #0d6efd; |
|
394 | 398 | <!-- Main Content --> |
395 | 399 | <main class="queue-main flex-grow-1"> |
396 | 400 | <!-- Flash Messages --> |
397 | | - <div class="queue-flash"> |
398 | | - <?= $this->Flash->render() ?> |
399 | | - </div> |
| 401 | + <?php |
| 402 | + $flashMessages = $this->getRequest()->getSession()->consume('Flash.flash'); |
| 403 | + if ($flashMessages) { |
| 404 | + echo '<div class="queue-flash">'; |
| 405 | + foreach ($flashMessages as $flash) { |
| 406 | + $element = $flash['element'] ?? 'flash/default'; |
| 407 | + $alertClass = match ($element) { |
| 408 | + 'flash/success' => 'alert-success', |
| 409 | + 'flash/error' => 'alert-danger', |
| 410 | + 'flash/warning' => 'alert-warning', |
| 411 | + default => 'alert-info', |
| 412 | + }; |
| 413 | + $icon = match ($element) { |
| 414 | + 'flash/success' => 'fa-check-circle', |
| 415 | + 'flash/error' => 'fa-exclamation-circle', |
| 416 | + 'flash/warning' => 'fa-exclamation-triangle', |
| 417 | + default => 'fa-info-circle', |
| 418 | + }; |
| 419 | + ?> |
| 420 | + <div class="alert <?= $alertClass ?> alert-dismissible fade show" role="alert"> |
| 421 | + <i class="fas <?= $icon ?> me-2"></i> |
| 422 | + <?= h($flash['message']) ?> |
| 423 | + <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> |
| 424 | + </div> |
| 425 | + <?php |
| 426 | + } |
| 427 | + echo '</div>'; |
| 428 | + } |
| 429 | + ?> |
400 | 430 |
|
401 | 431 | <?= $this->fetch('content') ?> |
402 | 432 | </main> |
|
426 | 456 | return new bootstrap.Tooltip(tooltipTriggerEl); |
427 | 457 | }); |
428 | 458 |
|
| 459 | + // Initialize flatpickr datetime inputs with D M Y display format |
| 460 | + document.querySelectorAll('.flatpickr-datetime').forEach(function(el) { |
| 461 | + flatpickr(el, { |
| 462 | + enableTime: true, |
| 463 | + dateFormat: 'Y-m-d H:i', |
| 464 | + altInput: true, |
| 465 | + altFormat: 'd M Y H:i', |
| 466 | + time_24hr: true, |
| 467 | + allowInput: true, |
| 468 | + }); |
| 469 | + }); |
| 470 | + |
429 | 471 | // Confirmation dialogs for postLink forms |
430 | 472 | document.querySelectorAll('form[data-confirm-message]').forEach(function(form) { |
431 | 473 | form.addEventListener('submit', function(e) { |
|
0 commit comments