fix(webui): Ansichtsrettung suchte am falschen Ort, Suche findet Nummern
#288 war mit dem Transport allein nicht behoben. Die Ansichtsrettung fragte dokumentweit nach der offenen Unteransicht: document.querySelector('.subtab-content.active') Im Markup tragen aber ACHT Unteransichten diese Klasse - jedes Modul hat seine eigene Startansicht, und switchMainTab() raeumt nur innerhalb des Moduls auf, das es oeffnet. Zurueck kam deshalb immer die erste in Dokumentreihenfolge (sub-projects-list), voellig unabhaengig davon, was gerade sichtbar war. Wer im Bugtracker filterte, waere also auf der Projektverwaltung gelandet. Dass die Rettung fuer POST-Formulare zu funktionieren schien, lag an den wenigen, die ihren Anker fest in der action stehen haben. Gesucht wird jetzt erst das aktive Modul und darin die Unteransicht. Zusaetzlich tragen die drei Filterformulare das Feld "view" fest im Markup. Dort ist ohne Zweifel bekannt, wo sie stehen - das haengt an keiner DOM-Abfrage mehr. Und restoreViewFromHash() faellt bei einer unbekannten Unteransicht auf das Modul zurueck, statt wortlos im Dashboard zu landen. Nachgewiesen an einer DOM-Probe, die die Modulstruktur aus index.php nachbaut und die echten Funktionen darauf laufen laesst: alte Fassung -> tab-projects, neue Fassung -> sub-bugtracker-items. Ausserdem, aus derselben Sitzung gemeldet: Die Suche findet Eintraege jetzt ueber ihre Nummer. Sie ist das, was ueberall zitiert wird, und stand in keiner der durchsuchten Spalten - "288" lief ins Leere. "288" findet jetzt das Item mit dieser Nummer und alles, was die Zahl im Text hat; "#288" ausschliesslich dieses eine. Gilt fuer Bugtracker, Fehler-Stream und den Parameter search der API, der bei der Gelegenheit auch in die OpenAPI-Beschreibung gekommen ist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0c1d269665
commit
c9c821a44a
+51
-4
@@ -4018,6 +4018,13 @@ chmod +x update-agent
|
||||
|
||||
<div class="card" style="padding:0.85rem 1.1rem;">
|
||||
<form method="GET" action="index.php" style="display:flex; flex-wrap:wrap; gap:0.45rem; align-items:center;">
|
||||
<!-- Die offene Ansicht faehrt als verstecktes Feld mit. Ein GET-Formular
|
||||
verwirft beim Absenden den Anker seiner action, und der Anker war
|
||||
bisher die einzige Quelle dafuer, was angezeigt wird - nach jeder
|
||||
Filteraenderung stand man wieder im Dashboard. Fest im Markup statt
|
||||
aus dem DOM gelesen: hier ist ohne Zweifel bekannt, wo das Formular
|
||||
steht. -->
|
||||
<input type="hidden" name="view" value="sub-roadmap-board">
|
||||
<select name="rm_project" class="form-input" style="width:auto; padding:0.3rem 0.6rem; font-size:0.8rem;" onchange="dcSubmit(this.form)">
|
||||
<option value="all">🌐 Alle Projekte</option>
|
||||
<?php foreach ($projects as $p): ?>
|
||||
@@ -4641,6 +4648,13 @@ chmod +x update-agent
|
||||
und ging bei jedem Auto-Refresh verloren.
|
||||
-->
|
||||
<form method="GET" action="index.php" style="display:flex; flex-wrap:wrap; gap:0.4rem; align-items:center;">
|
||||
<!-- Die offene Ansicht faehrt als verstecktes Feld mit. Ein GET-Formular
|
||||
verwirft beim Absenden den Anker seiner action, und der Anker war
|
||||
bisher die einzige Quelle dafuer, was angezeigt wird - nach jeder
|
||||
Filteraenderung stand man wieder im Dashboard. Fest im Markup statt
|
||||
aus dem DOM gelesen: hier ist ohne Zweifel bekannt, wo das Formular
|
||||
steht. -->
|
||||
<input type="hidden" name="view" value="sub-bugtracker-items">
|
||||
<select name="bt_project" class="form-input" style="width:auto; padding:0.3rem 0.6rem; font-size:0.8rem;" onchange="dcSubmit(this.form)">
|
||||
<option value="all">🌐 Alle Projekte</option>
|
||||
<?php foreach ($projects as $p): ?>
|
||||
@@ -4735,7 +4749,8 @@ chmod +x update-agent
|
||||
</select>
|
||||
|
||||
<input type="text" name="bt_q" value="<?= e($btFilters['search']) ?>" class="form-input"
|
||||
style="width:170px; padding:0.3rem 0.6rem; font-size:0.8rem;" placeholder="🔍 Suchen...">
|
||||
style="width:190px; padding:0.3rem 0.6rem; font-size:0.8rem;" placeholder="🔍 Suchen oder #288"
|
||||
title="Volltext ueber Titel, Beschreibung, Fehlermeldung, Tags und Dateipfad. Eine Zahl findet zusaetzlich das Item mit dieser Nummer; mit Raute (#288) nur dieses eine.">
|
||||
|
||||
<button type="submit" class="btn btn-sm">Filtern</button>
|
||||
<?php if ($btFilters['search'] !== '' || $btFilters['project_slug'] !== 'all' || $btFilters['status'] !== 'all' || $btFilters['severity'] !== 'all' || $btFilters['type'] !== 'all' || $btFilters['environment'] !== 'all'): ?>
|
||||
@@ -5026,6 +5041,13 @@ chmod +x update-agent
|
||||
</h2>
|
||||
|
||||
<form method="GET" action="index.php" style="display:flex; flex-wrap:wrap; gap:0.4rem; align-items:center;">
|
||||
<!-- Die offene Ansicht faehrt als verstecktes Feld mit. Ein GET-Formular
|
||||
verwirft beim Absenden den Anker seiner action, und der Anker war
|
||||
bisher die einzige Quelle dafuer, was angezeigt wird - nach jeder
|
||||
Filteraenderung stand man wieder im Dashboard. Fest im Markup statt
|
||||
aus dem DOM gelesen: hier ist ohne Zweifel bekannt, wo das Formular
|
||||
steht. -->
|
||||
<input type="hidden" name="view" value="sub-bugtracker-errors">
|
||||
<select name="err_project" class="form-input" style="width:auto; padding:0.3rem 0.6rem; font-size:0.8rem;" onchange="dcSubmit(this.form)">
|
||||
<option value="all">🌐 Alle Projekte</option>
|
||||
<?php foreach ($projects as $p): ?>
|
||||
@@ -5089,7 +5111,8 @@ chmod +x update-agent
|
||||
</select>
|
||||
|
||||
<input type="text" name="err_q" value="<?= e($errFilters['search']) ?>" class="form-input"
|
||||
style="width:170px; padding:0.3rem 0.6rem; font-size:0.8rem;" placeholder="🔍 Suchen...">
|
||||
style="width:190px; padding:0.3rem 0.6rem; font-size:0.8rem;" placeholder="🔍 Suchen oder #288"
|
||||
title="Volltext ueber Titel, Beschreibung, Fehlermeldung, Tags und Dateipfad. Eine Zahl findet zusaetzlich das Item mit dieser Nummer; mit Raute (#288) nur dieses eine.">
|
||||
<button type="submit" class="btn btn-sm">Filtern</button>
|
||||
<a href="index.php#sub-bugtracker-errors" class="btn btn-sm btn-secondary">Zurücksetzen</a>
|
||||
</form>
|
||||
@@ -6260,9 +6283,24 @@ SYSTEM
|
||||
* Absenden aus einem onchange ueberhaupt ein submit-Ereignis entsteht.
|
||||
*/
|
||||
function dcCurrentView() {
|
||||
const activeSub = document.querySelector('.subtab-content.active');
|
||||
// Erst das Modul, dann die Unteransicht DARIN. Die Reihenfolge ist
|
||||
// der Kern der Sache: Im Markup tragen ACHT Unteransichten die
|
||||
// Klasse "active" - jedes Modul hat seine eigene Startansicht, und
|
||||
// switchMainTab() raeumt nur innerhalb des Moduls auf, das es
|
||||
// oeffnet. Ein dokumentweites querySelector('.subtab-content.active')
|
||||
// liefert deshalb immer die erste in Dokumentreihenfolge
|
||||
// (sub-projects-list), voellig unabhaengig davon, was gerade
|
||||
// sichtbar ist. Genau daran ist die Ansichtsrettung fuer POST seit
|
||||
// jeher gescheitert - und der Anschein, sie funktioniere, kam von
|
||||
// den wenigen Formularen, die ihren Anker fest in der action
|
||||
// stehen haben.
|
||||
const activeTab = document.querySelector('.main-content > .tab-content.active');
|
||||
return activeSub ? activeSub.id : (activeTab ? activeTab.id : '');
|
||||
if (!activeTab) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const activeSub = activeTab.querySelector('.subtab-content.active');
|
||||
return activeSub ? activeSub.id : activeTab.id;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6995,6 +7033,15 @@ SYSTEM
|
||||
|
||||
const moduleName = moduleOfSubtab(hash);
|
||||
if (!moduleName) {
|
||||
// Unbekannte Unteransicht - dann wenigstens das Modul, wenn es
|
||||
// sich aus dem Namen ergibt. Wortlos im Dashboard zu landen ist
|
||||
// die schlechteste aller Antworten: Der Nutzer sieht nicht,
|
||||
// dass etwas schiefging, sondern nur, dass er woanders ist.
|
||||
const rest = hash.substring(4);
|
||||
const guess = Object.keys(subnavItems).find(m => rest.startsWith(m + '-'));
|
||||
if (guess) {
|
||||
switchMainTab(guess, null, null, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user