homepage search improvements

#511
This commit is contained in:
Hamid Reza Mohammadi 2026-10-02 13:08:57 +03:30
parent b2e03dd839
commit 2651e603c4

View File

@ -1569,12 +1569,12 @@ function onHomeSearchInput(value) {
var hasValue = value.length > 0;
if (clearBtn) clearBtn.style.display = hasValue ? 'inline' : 'none';
if (popularRow) popularRow.style.display = hasValue ? 'none' : '';
if (hintNode) hintNode.style.display = hasValue ? 'block' : 'none';
foundNode.innerHTML = '';
if (!hasValue) {
foundNode.style.display = 'none';
if (popularRow) popularRow.style.display = '';
if (hintNode) hintNode.style.display = 'none';
return;
}
@ -1586,13 +1586,30 @@ function onHomeSearchInput(value) {
// reappearing at the loop's current index forever, hanging the page. querySelectorAll takes a
// static snapshot up front, so appends during the loop can't affect it.
var poets = document.querySelectorAll('.poet');
// A poet who's one of the "سخنوران پرمخاطب" favorites is also listed again further down under
// their real century - that's the normal page structure, not a data error - so a name that
// matches both copies would otherwise get rendered twice. Dedupe by the poet's link, the one
// thing both copies share.
var seenHrefs = {};
for (var i = 0; i < poets.length; i++) {
var dataValue = poets[i].getAttribute('data-value');
if (dataValue != null && dataValue.indexOf(replaced) !== -1) {
if (dataValue == null || dataValue.indexOf(replaced) === -1) continue;
var link = poets[i].querySelector('a');
var href = link ? link.getAttribute('href') : null;
if (href != null) {
if (seenHrefs[href]) continue;
seenHrefs[href] = true;
}
foundNode.appendChild(poets[i].cloneNode(true));
}
}
foundNode.style.display = foundNode.childElementCount > 0 ? '' : 'none';
var hasMatches = foundNode.childElementCount > 0;
foundNode.style.display = hasMatches ? '' : 'none';
// No matching poet: there's nothing useful to show in place of the favorites row, so put the
// page back the way it looked before the user started typing (same as clearing the box) rather
// than leaving an empty gap with the "press Enter" hint still showing over it.
if (popularRow) popularRow.style.display = hasMatches ? 'none' : '';
if (hintNode) hintNode.style.display = hasMatches ? 'block' : 'none';
}
function clearHomeSearch() {