Scrollen zur aktuellen Kategorie seit 2.8.0.beta5 defekt

In Discourse-Versionen vor 2.8.0.beta5 wird beim Bearbeiten eines Themas und Klicken auf das Dropdown-Menü zur Auswahl der Kategorie die aktuelle Kategorie sowohl ausgewählt als auch in der Liste der Kategorien nach unten gescrollt, sodass sie sofort oben sichtbar ist und ihre Unterkategorien (falls vorhanden) sichtbar sind. Das Thema kann dann leicht in eine passendere Unterkategorie verschoben werden.

Funktioniert in 2.8.0.beta4 und früher:

Ab 2.8.0.beta5 wird die aktuelle Kategorie beim Öffnen des Dropdown-Menüs zur Auswahl der Kategorie nicht mehr nach unten gescrollt:

Ich hoffe, diese kurzen Videodemos helfen dabei, das, was ich zu beschreiben versuche, schnell zu verdeutlichen.

Hinweis: In meinen Beispielen sind die Optionen „feste Kategoriepositionen“ und „feste Kategoriepositionen bei Erstellung“ aktiviert. Das Scrollen zur aktuellen Position fehlt jedoch, unabhängig davon, ob diese Optionen aktiviert oder deaktiviert sind.

Ich habe dies in der lokalen Entwicklung bestätigt, indem ich 2.8.0.beta4 installiert und das gewünschte Verhalten beobachtet habe, und dann auf 2.8.0.beta5 aktualisiert und beobachtet habe, dass das Verhalten nicht mehr funktionierte.

Ich habe den Code durchsucht, bis ich feststellte, dass der folgende große Commit, der select-kit.js betrifft, der Ort ist, an dem die Änderung stattgefunden hat (warten Sie einen Moment, und es sollte zu den betreffenden Codezeilen springen):

Der folgende Code wurde aus der Methode _scrollToRow() entfernt, die von der Methode _scrollToCurrent() aufgerufen wird:

if (rowContainer) {
  const collectionContainer = rowContainer.parentNode;

  collectionContainer.scrollTop =
    rowContainer.offsetTop - collectionContainer.offsetTop;
}

Ich habe bestätigt, dass das Hinzufügen dieses Codes zu select-kit.js in 2.8.0.beta5 das Problem behebt. Da mir jedoch nicht klar ist, warum er entfernt wurde, bin ich mir anderer möglicher Nebenwirkungen seiner Wiederherstellung nicht sicher.

Vielen Dank, dass Sie sich das angesehen haben. Ich hoffe, wir können dieses Verhalten in einer zukünftigen Version wieder zum Laufen bringen.

4 „Gefällt mir“

Hallo, danke dafür :+1:

Ich erinnere mich nicht mehr genau, warum ich das getan habe, aber nach meinem jetzigen Verständnis halte ich das auch für einen Fehler.

Ich habe diesen PR erstellt:

Können Sie versuchen, diesen Code zu verwenden und mir sagen, ob Sie denken, dass das für Sie ausreichen würde?

Hallo Joffrey, danke, dass du dir das angesehen hast! Ich habe die neuesten Änderungen getestet, aber es scheint, dass sie nicht funktioniert haben. Da sie zusammengeführt wurden, habe ich dies im Branch „tests-passed“ bestätigt.

Von den beiden Commits im PR funktioniert der erste (ab0fbf1), wird aber vom zweiten überschrieben (92943ff).

Die Änderung in Zeile 992 scheint in Ordnung zu sein, hat aber nicht den erwarteten Effekt. Es scheint, dass der entfernte Codeblock, der den Wert von collectionContainer.scrollTop anpasst, benötigt wird.

Nochmals vielen Dank!

1 „Gefällt mir“

Ja, ich war mir nicht sicher, ob dieses Verhalten ausreichen würde. Ich kann das morgen wieder hinzufügen. Können Sie bitte genauer sagen, was Ihnen an diesem Verhalten jetzt nicht gefällt?

Hallo Joffrey,

vielen Dank, dass Sie sich weiterhin damit beschäftigen. Mit den aktuellen Codeänderungen (ich habe sichergestellt, dass ich den neuesten Code heruntergeladen, tmp gelöscht und den Entwicklungsserver neu gestartet habe) wurde das Verhalten, das in Versionen vor 2.8.0.beta5 vorhanden war, nicht wiederhergestellt. Es wird immer noch nicht gescrollt, um die aktuelle Kategorie am oberen Rand der sichtbaren Optionen in der Dropdown-Liste anzuzeigen.

Das korrekte/gewünschte Verhalten ist das, was im ersten Video im ursprünglichen Beitrag gezeigt wird, jedoch funktioniert es derzeit immer noch wie im zweiten Video. Derzeit beginnt die Scrollleiste immer ganz oben, unabhängig davon, wo sich die aktuelle Kategorie in den Optionen befindet.

Die Zeile rowContainer?.focus({ preventScroll }); scheint in diesem Fall keine Auswirkung zu haben, unabhängig davon, ob preventScroll true oder false ist oder ob die gesamte Zeile entfernt wird.

Die wesentliche Zeile, die das Verhalten bewirkt (nicht in der aktuellen Version vorhanden), ist:

collectionContainer.scrollTop =
          rowContainer.offsetTop - collectionContainer.offsetTop;

Ohne diese Zeile scrollt es nicht zur richtigen Position, da scrollTop standardmäßig 0 ist. Nach Ausführung dieser Zeile entspricht scrollTop der korrekten Anzahl von Pixeln, die heruntergescrollt werden müssen.

Ich hoffe, das ist hilfreich. Bitte lassen Sie mich wissen, wenn ich weitere Klärungen vornehmen kann.

Danke!

Ja, es ist nicht ganz oben, aber es ist im sichtbaren Bereich, was meiner Meinung nach ausreichen sollte.

Hallo Joffrey,

Danke für das Feedback. Ich habe meiner Demo mehr Kategorien hinzugefügt und bestätigt, dass die aktuelle Kategorie jetzt im Ansichtsfenster erscheint, definitiv eine Verbesserung. Es wäre immer noch ideal, wenn sie am Anfang der Liste erscheinen würde, wie sie es früher getan hat. Dies würde sicherstellen, dass mehr der darunter liegenden Unterkategorien sofort sichtbar sind und der Benutzer auf eine Unterkategorie klicken kann, ohne zuerst nach unten scrollen zu müssen, um sie anzuzeigen. Meiner Meinung nach ist dies ein stärkerer Anwendungsfall als die Anzeige benachbarter, nicht verwandter Kategorien. Wurde sie absichtlich zentriert geändert oder war es ein versehentliches Zurückfallen auf das frühere Verhalten? Auf jeden Fall liegt es an dir – ich gebe nur meinen Senf dazu.

Nochmals vielen Dank und ich schätze deine harte Arbeit an Discourse!