WIP: Anpassung der results seite und erstellung der script-datei #37

Draft
viratex wants to merge 24 commits from SuchergebnisseJS into dev
Showing only changes of commit a8df9590fd - Show all commits
+31 -12
View File
@@ -1,26 +1,45 @@
function initSorter() {
const form = document.getElementById('search-form-id');
function initClientSorter() {
Outdated
Review

Diese js sorgt nur dafür, dass das Formular halt statt über die Form jetzt über js abgeschickt wird. Wo ist hier denn jetzt der Vorteil der js?

Wenn der Nutzer einen Radio-Button ändert, dann kann diese js das abfangen und statt wieder eine Anfrage an den Server (ArticleManager) zu schicken, kann die js doch selbst die Sortierung vornehmen.

Diese js sorgt nur dafür, dass das Formular halt statt über die Form jetzt über js abgeschickt wird. Wo ist hier denn jetzt der Vorteil der js? Wenn der Nutzer einen Radio-Button ändert, dann kann diese js das abfangen und statt wieder eine Anfrage an den Server (ArticleManager) zu schicken, kann die js doch selbst die Sortierung vornehmen.
const listContainer = document.querySelector('.s-res-list');
const sortRadios = document.querySelectorAll('.sort-radio');
if (!form) return;
// wenn keine liste vorhanden, abbrechen
if (!listContainer || sortRadios.length === 0) return;
sortRadios.forEach(radio => {
radio.addEventListener('change', function() {
const pageInput = document.getElementById('s-res-page-input');
if (pageInput) {
pageInput.value = '1';
}
form.submit();
const cards = Array.from(listContainer.querySelectorAll('.s-res-item'));
const sortValue = this.value;
cards.sort((a, b) => {
if (sortValue === 'alphabet') {
// alphabetische sortierung
const titleA = a.querySelector('.s-res-link').textContent.trim().toLowerCase();
const titleB = b.querySelector('.s-res-link').textContent.trim().toLowerCase();
return titleA.localeCompare(titleB);
}
else if (sortValue === 'newest' || sortValue === 'oldest') {
// hoehere ID wird als neuer gesehen
const urlA = a.querySelector('.s-res-link').getAttribute('href');
const urlB = b.querySelector('.s-res-link').getAttribute('href');
const idA = parseInt(urlA.match(/id=(\d+)/)[1], 10);
const idB = parseInt(urlB.match(/id=(\d+)/)[1], 10);
return sortValue === 'newest' ? idB - idA : idA - idB;
}
return 0;
});
listContainer.innerHTML = '';
cards.forEach(card => listContainer.appendChild(card));
});
});
}
// ist das DOM bereits vollständig aufgebaut?
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initSorter);
document.addEventListener('DOMContentLoaded', initClientSorter);
} else {
initSorter();
initClientSorter();
}