This commit is contained in:
Flatlogic Bot 2026-04-09 01:39:09 +00:00
parent 347a95a312
commit e191a6916e

View File

@ -700,6 +700,28 @@ $current_session_user = $_SESSION['user'] ?? '';
margin-bottom: 1rem;
}
.list-filter-bar {
display: flex;
gap: 0.75rem;
align-items: center;
flex-wrap: wrap;
margin-bottom: 1rem;
}
.list-filter-input {
flex: 1;
min-width: 240px;
}
.list-filter-meta {
color: #96a0b5;
font-size: 0.8rem;
}
.hidden-by-filter {
display: none !important;
}
@media (max-width: 1200px) {
.admin-grid {
grid-template-columns: 1fr;
@ -833,11 +855,32 @@ $current_session_user = $_SESSION['user'] ?? '';
<?php if (empty($custom_items)): ?>
<div class="empty-state">Aucun objet Item Custom enregistré pour le moment.</div>
<?php else: ?>
<div class="item-card-list">
<div class="list-filter-bar">
<input
type="text"
id="item-custom-filter"
class="form-control list-filter-input"
placeholder="Filtrer les objets déjà ajoutés par nom, type, sous-type ou UUID..."
autocomplete="off"
>
<button type="button" id="item-custom-filter-reset" class="btn-modern danger">Effacer</button>
<div class="list-filter-meta">
Affichage : <span id="item-custom-visible-count"><?php echo count($custom_items); ?></span> / <?php echo count($custom_items); ?>
</div>
</div>
<div class="form-help" style="margin-top:-0.25rem; margin-bottom:1rem;">Tape quelques lettres pour retrouver rapidement un objet déjà présent dans ta liste Item Custom.</div>
<div id="item-custom-no-results" class="empty-state hidden-by-filter">Aucun objet Item Custom ne correspond à cette recherche.</div>
<div class="item-card-list" id="item-custom-list">
<?php foreach ($custom_items as $item): ?>
<?php $item_id = (int) $item['cl_scitemcustom_id']; ?>
<?php $item_stats = $custom_stats_by_item[$item_id] ?? []; ?>
<section class="custom-item-card" id="itemcustom-<?php echo $item_id; ?>">
<?php $item_search_text = trim(implode(' ', array_filter([
(string) ($item['cl_scobjs_name'] ?? ''),
(string) ($item['cl_scobjs_type'] ?? ''),
(string) ($item['cl_scobjs_subtype'] ?? ''),
(string) ($item['cl_scobjs_uuid'] ?? ''),
]))); ?>
<section class="custom-item-card" id="itemcustom-<?php echo $item_id; ?>" data-item-search="<?php echo htmlspecialchars($item_search_text, ENT_QUOTES, 'UTF-8'); ?>">
<div class="custom-item-header">
<div class="item-meta">
<img src="https://cstone.space/uifimages/<?php echo htmlspecialchars($item['cl_scobjs_uuid'], ENT_QUOTES, 'UTF-8'); ?>.png" class="item-preview" alt="">
@ -977,5 +1020,51 @@ $current_session_user = $_SESSION['user'] ?? '';
</main>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
var filterInput = document.getElementById('item-custom-filter');
var resetButton = document.getElementById('item-custom-filter-reset');
var visibleCount = document.getElementById('item-custom-visible-count');
var emptyState = document.getElementById('item-custom-no-results');
var itemCards = Array.prototype.slice.call(document.querySelectorAll('#item-custom-list .custom-item-card'));
if (!filterInput || !resetButton || !visibleCount || !emptyState || itemCards.length === 0) {
return;
}
function normalizeValue(value) {
return (value || '')
.toString()
.toLowerCase()
.normalize('NFD')
.replace(/[̀-ͯ]/g, '')
.trim();
}
function applyFilter() {
var query = normalizeValue(filterInput.value);
var matches = 0;
itemCards.forEach(function (card) {
var searchable = normalizeValue(card.getAttribute('data-item-search'));
var isMatch = query === '' || searchable.indexOf(query) !== -1;
card.classList.toggle('hidden-by-filter', !isMatch);
if (isMatch) {
matches += 1;
}
});
visibleCount.textContent = String(matches);
emptyState.classList.toggle('hidden-by-filter', matches !== 0);
}
filterInput.addEventListener('input', applyFilter);
resetButton.addEventListener('click', function () {
filterInput.value = '';
filterInput.focus();
applyFilter();
});
});
</script>
</body>
</html>