feat(web+android): Warteschlange bearbeiten — ziehen und entfernen
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
77a3bb33f0
commit
d5b5c8cf84
9 files changed
+330
-7
No files matched your search
@@ -0,0 +1,37 @@
|
||||
// Reine Indexrechnung der Warteschlange — bewusst OHNE Importe, damit sie sich ohne DOM und
|
||||
// ohne Wiedergabe pruefen laesst. Hier steckt der Teil, bei dem ein Fehler nicht auffaellt,
|
||||
// sondern spaeter den falschen Titel spielt.
|
||||
|
||||
|
||||
/**
|
||||
* Entfernt Position `i`. Liefert den neuen Zeiger und ob der LAUFENDE Titel getroffen wurde.
|
||||
* Der Zeiger wandert mit: faellt ein Titel VOR dem laufenden weg, rutscht dieser eine Stelle vor.
|
||||
*/
|
||||
export function queueNachEntfernen(laenge, qIdx, i) {
|
||||
if (i < 0 || i >= laenge) return { qIdx, warAktuell: false, leer: laenge === 0 };
|
||||
const warAktuell = i === qIdx;
|
||||
const neueLaenge = laenge - 1;
|
||||
if (neueLaenge === 0) return { qIdx: -1, warAktuell, leer: true };
|
||||
let neu = qIdx;
|
||||
if (!warAktuell && i < qIdx) neu--;
|
||||
// Traf es den laufenden Titel, zeigt der Index jetzt auf den nachrueckenden — am Ende der
|
||||
// Liste gibt es keinen, dann auf den davor.
|
||||
if (warAktuell) neu = Math.min(neu, neueLaenge - 1);
|
||||
return { qIdx: neu, warAktuell, leer: false };
|
||||
}
|
||||
|
||||
/**
|
||||
* Verschiebt `von` nach `nach` und liefert die neue Reihenfolge samt nachgefuehrtem Zeiger.
|
||||
* Der Zeiger wird ueber die POSITION des laufenden Titels neu bestimmt, nicht gerechnet — das
|
||||
* stimmt auch, wenn er selbst gezogen wurde oder ein anderer ueber ihn hinweggezogen ist.
|
||||
*/
|
||||
export function queueNachVerschieben(ids, qIdx, von, nach) {
|
||||
const n = ids.length;
|
||||
if (von === nach || von < 0 || von >= n || nach < 0 || nach >= n) return { ids, qIdx };
|
||||
const laufende = ids[qIdx];
|
||||
const neu = ids.slice();
|
||||
const [x] = neu.splice(von, 1);
|
||||
neu.splice(nach, 0, x);
|
||||
const gefunden = neu.indexOf(laufende);
|
||||
return { ids: neu, qIdx: gefunden >= 0 ? gefunden : qIdx };
|
||||
}
|
||||
Reference in new issue
Block a user