feat: barre de recherche epuree + barre flottante de resultats
CI / lint (push) Failing after 1s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -7s

- Header: retire Aa/wd/.*, compteur 0/0, fleches nav (reste filtre + clear)
- Nouvelle barre flottante sticky en bas du content-area
- Style pill arrondi, fond semi-transparent, ombre legere
- Contient: compteur, nav prev/next, toggles Aa/wd/.*
- Apparait seulement quand des resultats sont affiches
- Disparait au clear ou retour dashboard
- Mobile: filtre + clear restent visibles
- IDs renommes rb-* pour eviter collisions
This commit is contained in:
2026-06-15 15:12:18 -04:00
parent 75a28da8d9
commit 1ce3a6d65c
3 changed files with 91 additions and 58 deletions
+17 -8
View File
@@ -510,15 +510,19 @@ function _triggerAdvancedSearch(rawQuery) {
export function initSearch() {
const input = document.getElementById("search-input");
if (!input) return;
const caseBtn = document.getElementById("search-case-btn");
const wordBtn = document.getElementById("search-word-btn");
const regexBtn = document.getElementById("search-regex-btn");
const caseBtn = document.getElementById("rb-case");
const wordBtn = document.getElementById("rb-word");
const regexBtn = document.getElementById("rb-regex");
const filterBtn = document.getElementById("search-filter-btn");
const clearBtn = document.getElementById("search-clear-btn");
const filterRow = document.getElementById("search-filter-row");
const prevBtn = document.getElementById("search-prev-btn");
const nextBtn = document.getElementById("search-next-btn");
const countEl = document.getElementById("search-match-count");
const prevBtn = document.getElementById("rb-prev");
const nextBtn = document.getElementById("rb-next");
const countEl = document.getElementById("rb-count");
const resultsBar = document.getElementById("results-bar");
function _showResultsBar() { if (resultsBar) resultsBar.style.display = 'flex'; }
function _hideResultsBar() { if (resultsBar) resultsBar.style.display = 'none'; }
function _updateToggleUI() {
caseBtn.classList.toggle("active", state.searchCaseSensitive);
@@ -544,7 +548,7 @@ export function initSearch() {
if (_searchResultIdx >= 0 && _searchResultIdx < _searchResultItems.length) {
_searchResultItems[_searchResultIdx].scrollIntoView({ block: "nearest", behavior: "smooth" });
}
const countEl = document.getElementById("search-match-count");
const countEl = document.getElementById("rb-count");
if (countEl) countEl.textContent = _searchResultIdx >= 0 ? `${_searchResultIdx + 1}/${_searchResultItems.length}` : `0/${_searchResultItems.length}`;
}
@@ -552,6 +556,7 @@ export function initSearch() {
_searchResultItems = Array.from(document.querySelectorAll(".search-result-item"));
_searchResultIdx = _searchResultItems.length > 0 ? 0 : -1;
_updateResultHighlight();
if (_searchResultItems.length > 0) _showResultsBar(); else _hideResultsBar();
}
window.navigateSearchResults = function(delta) {
@@ -702,6 +707,7 @@ export function initSearch() {
state.searchWholeWord = false;
state.searchRegex = false;
_updateToggleUI();
_hideResultsBar();
SearchChips.clear();
AutocompleteDropdown.hide();
showWelcome();
@@ -897,8 +903,11 @@ export function renderAdvancedSearchResults(data, query, tagFilter) {
area.innerHTML = "";
// Update match counter
const countEl = document.getElementById("search-match-count");
const countEl = document.getElementById("rb-count");
if (countEl) countEl.textContent = `${data.total > 0 ? "1" : "0"}/${data.total}`;
// Show floating results bar
var rb = document.getElementById('results-bar');
if (rb) rb.style.display = 'flex';
// Header with result count and sort controls
const header = el("div", { class: "search-results-header" });