Der Orden des Phönix stand vor dem Stein der Weisen
Alphabetisch stimmt das, nur sieht man sie andersherum. Es gibt jetzt einen Sortiertitel: „Harry Potter 1", „Harry Potter 2" — und die Reihe steht in der Ordnung, in der man sie schaut. Leer gelassen bleibt alles wie bisher, beim Titel ohne Artikel davor. Er hat einen eigenen Merker, nicht den des Titels. Wer die Reihenfolge festlegt, soll den Titel trotzdem weiter automatisch bekommen; beides an einem Schalter hiesse, für das eine auf das andere zu verzichten. Eine Korrektur der Zuordnung lässt ihn ebenfalls stehen. Und WALL·E bleibt nicht mehr unter E. Die Kachel wurde nach einer Korrektur zwar neu beschriftet, blieb aber an ihrem Platz — jetzt rutscht sie dorthin, wo sie hingehört. Liegt der Platz im noch nicht geladenen Teil der Liste, geht sie weg und sagt wohin, statt falsch stehenzubleiben. Dazu ein Dialog, in dem alles zu einem Titel beieinander steht: Titel, Sortiertitel, Bilder, Zuordnung. Die vier Menüpunkte gab es schon, jeder für sich richtig — zusammen aber kein Ort. Wer einen Film geraderückt, macht selten nur eines davon. Die Abkürzungen bleiben. Beim Bauen gefunden: das Zurücksetzen des Sortiertitels endete in einer 500. SortTitle.For ist eine C#-Methode, und EF Core übersetzt sie nicht nach SQL. Es geht um eine Zeile — die wird jetzt geladen und zurückgeschrieben, statt die Regel ein zweites Mal als SQL zu schreiben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e70c33f7e2
commit
fcf40e4394
@@ -20,6 +20,7 @@ import { kontextmenue, menueAnZiel, type Menuepunkt } from '../menue';
|
||||
import { bilddialog } from '../bilder';
|
||||
import { zuordnungsdialog } from '../zuordnung';
|
||||
import { titeldialog } from '../titel';
|
||||
import { bearbeiten } from '../bearbeiten';
|
||||
|
||||
/** Die Verwaltung.
|
||||
*
|
||||
@@ -337,6 +338,9 @@ function pruefbereich(geaendert: () => void): HTMLElement {
|
||||
mehr.innerHTML = icons.punkte;
|
||||
mehr.setAttribute('aria-label', `Mehr zu „${e.title}“`);
|
||||
const punkte = (): Menuepunkt[] => [
|
||||
// Auch hier: ein Ort für alles, die Einzelnen bleiben als Abkürzung.
|
||||
{ text: 'Bearbeiten', icon: 'stift',
|
||||
tun: () => bearbeiten(art, e.id, () => void laden()) },
|
||||
{ text: 'Titel ändern', icon: 'stift',
|
||||
tun: () => titeldialog(art, e.id, e.title, () => void laden()) },
|
||||
{ text: 'Bilder bearbeiten', icon: 'stift',
|
||||
|
||||
@@ -396,6 +396,56 @@ export function mediathek(
|
||||
nachAuswahl();
|
||||
}
|
||||
|
||||
/* ---------- Umsortieren nach einer Korrektur ----------
|
||||
*
|
||||
* **„WALL·E" stand nach der Korrektur weiter unter E.**
|
||||
*
|
||||
* Die Kachel wurde zwar neu beschriftet, blieb aber an ihrem Platz — bis
|
||||
* man die Seite neu lud. Jetzt rutscht sie dorthin, wo sie hingehört.
|
||||
*
|
||||
* **Und wenn der Platz gar nicht geladen ist, geht sie.** Bei 447 Titeln
|
||||
* sind zweihundert da; ein Film, der von E nach W wandert, hat seinen
|
||||
* neuen Platz oft noch gar nicht vor sich. Ihn ans Ende zu hängen wäre
|
||||
* falsch, ihn stehenzulassen auch — also sagt die Liste, wohin er ging,
|
||||
* und nimmt ihn weg.
|
||||
*/
|
||||
gitter.addEventListener('kachel-umsortiert', e => {
|
||||
const { id, sortTitel, titel } = (e as CustomEvent<{
|
||||
id: string; sortTitel: string | null; titel: string;
|
||||
}>).detail;
|
||||
|
||||
// Nur beim Sortieren nach Titel steht die Reihenfolge auf dem
|
||||
// Sortiertitel. Nach Jahr oder Zugang entscheidet etwas anderes, und
|
||||
// das kennt die Kachel nicht.
|
||||
if (ordnung !== 'title') return;
|
||||
|
||||
const k = gitter.querySelector<HTMLElement>(`.kachel[data-id="${CSS.escape(id)}"]`);
|
||||
if (!k) return;
|
||||
|
||||
const schluessel = (sortTitel ?? titel).toLocaleLowerCase('de');
|
||||
const andere = [...gitter.querySelectorAll<HTMLElement>('.kachel')].filter(x => x !== k);
|
||||
|
||||
const davor = andere.find(x => {
|
||||
const seiner = bekannt.get(x.dataset.id ?? '');
|
||||
const sein = (seiner?.sortTitel ?? seiner?.titel ?? '').toLocaleLowerCase('de');
|
||||
return sein.localeCompare(schluessel, 'de') > 0;
|
||||
});
|
||||
|
||||
if (davor) { gitter.insertBefore(k, davor); return; }
|
||||
|
||||
// Hinter allem Geladenen — also irgendwo im noch nicht geholten Teil.
|
||||
if (!amEnde) {
|
||||
k.remove();
|
||||
bekannt.delete(id);
|
||||
gewaehlt.delete(id);
|
||||
nachAuswahl();
|
||||
hinweisZeigen(`„${titel}" steht jetzt weiter hinten in der Liste.`);
|
||||
return;
|
||||
}
|
||||
|
||||
gitter.appendChild(k);
|
||||
});
|
||||
|
||||
/** Streicht man an den Rand, wandert die Seite mit.
|
||||
*
|
||||
* **Sonst endet jede Auswahl am unteren Bildrand.** Bei 447 Titeln sind
|
||||
|
||||
Reference in New Issue
Block a user