Fehlender PluginOutlet für die Komponente second-factor.gjs und für second-factor-add-totp.gjs

Hallo
Ich habe kürzlich mit Discourse zu arbeiten begonnen und aus meiner einwöchigen Erfahrung kann ich definitiv sagen, dass die Einstiegshürde für Entwickler, die tatsächlich Kernaspekte ändern müssen, ziemlich hoch ist. Dies liegt an mangelnder echter Dokumentation/Information, insbesondere wenn wir über die neuesten Optionen sprechen, da ich nur Dinge finde, die für Version 3.6.0 nicht mehr funktionieren, anstatt den neuen Ansatz. Selbst wenn ich etwas finde, ist die Detailtiefe gering, es gibt keine realen Beispiele oder detaillierteren Erklärungen zur Verwendung.
Dennoch muss ich die Komponente second-factor-add-totp.gjs ändern und konnte dies nicht tun, da es keine Informationen darüber gibt, wie dies in meinem benutzerdefinierten Theme ordnungsgemäß erfolgen kann.
Ich habe festgestellt, dass es etwas namens PluginOutlet gibt, das als Hook konzipiert ist, den Sie verwenden können, um Ihren benutzerdefinierten Code einzufügen oder sogar die Ausgabe zu ändern, wenn das Element in PluginOutlet eingeschlossen ist (ich bin mir nicht sicher, es gibt so etwas wie api.renderInOutlet, aber ich habe keine normalen Informationen zur Verwendung gefunden). Wenn ich mir diese Ember-Komponenten ansehe, sehe ich dort kein PluginOutlet, das möglicherweise helfen könnte, zumindest einige Manipulationen an der Struktur mit reinem JS durchzuführen.

Können Sie klären, ob dies dort hinzugefügt werden kann und ob ich es verwenden könnte, um die Struktur des Modalfensters zu ändern oder zumindest reines JS zu verwenden, um einige Elemente zu verschieben?
Außerdem habe ich vielleicht nicht gefunden, aber gibt es eine Dokumentation mit Beispielen für neue Ansätze?

1 „Gefällt mir“

Können Sie mehr Details zu Ihrem Endziel mitteilen, damit wir Sie besser beraten können?

1 „Gefällt mir“

Natürlich.
Gemäß der „modifizierten“ Version, die ich habe, muss ich das Design für das MFA-Modal (wenn der Benutzer eine Authenticator-App für MFA einrichten soll) etwas aktualisieren.
Mit Aktualisierung meine ich zum Beispiel, den QR-Code in der HTML-Struktur zu verschieben, um genauer zu sein, der QR-Code sollte sich irgendwo zwischen dem bereitgestellten neuen Text (HTML-Markup) auf der Seite „js.user.second_factor.enable_description“ befinden.
Ein weiteres Beispiel ist, sicherzustellen, dass „Manuell eingeben“ stattdessen den tatsächlichen Code anzeigt, der kopiert werden kann, während darauf geklickt wird (manuell über JS den Klick auslösen, damit er erscheint und ihn einfach verschieben).

All dies kann durch normale JS-Manipulationen erreicht werden, ohne eine tatsächliche Neukonstruktion der ursprünglichen Komponente, aber die größte Herausforderung für mich besteht darin, einen Ort zu finden, an dem dieses JS platziert werden kann, damit es beim Öffnen des Modals ausgelöst wird, was ich bisher noch nicht herausfinden konnte.
Zusätzliche Klärung: Ich verwende ein benutzerdefiniertes Theme, das über die GIT-Option gespeichert ist.

Lassen Sie mich wissen, wenn etwas unklar ist.

Hallo @Falco , hast du Vorschläge?

Hallo @Yan_Rudenko, die besten Dokumente für den Anfang sind wahrscheinlich diese Anleitung:

Wie Sie erwähnt haben, sind Plugin-Outlets der beste Weg, um die Benutzeroberfläche anzupassen. Aber diese sind nicht überall verfügbar. Nur bestimmte Teile der Benutzeroberfläche sind für die Anpassung vorgesehen.

Das Manipulieren des DOM mit normalem JS wird Fehler verursachen, da unser Rendering-Framework die Kontrolle über die Elemente verliert, die es auf dem Bildschirm gerendert hat. Es ist am besten, sich an die unterstützten Plugin-Outlets und andere Discourse JS-APIs zu halten (die ebenfalls in der Anleitung behandelt werden).

3 „Gefällt mir“

Hallo @david, danke für den Tutorial-Link, aber ich habe ihn bereits geprüft und keine Antworten auf meine Fragen gefunden. Die Beispiele selbst sind grundlegend und decken zum Beispiel nicht ab, wie man eine bestimmte Kategorie erhält (anstatt einen Ajax-Aufruf zu tätigen) oder wie man die Discourse API im Code verwendet (wie auf https://docs.discourse.org/ erwähnt), was meiner Meinung nach vorhanden ist. Deshalb habe ich hier geschrieben, um mehr Details von Leuten zu erhalten, die täglich mit Discourse arbeiten und viele Dinge wissen, die nicht in der Dokumentation aufgeführt sind.

Ich verstehe vollkommen, dass die Verwendung von reinem JS Probleme verursachen kann, aber es ist das Einzige, was mir im Moment einfällt. Vielleicht kann ich es in Zukunft auf eine angemessenere Weise modifizieren, wenn es solche Möglichkeiten gibt.

Wenn ich das richtig verstehe, können die von mir erwähnten Änderungen in der aktuellen Version von Discourse, die ich verwende (3.6.0.beta2-latest), nicht mit den integrierten Werkzeugen von Discourse vorgenommen werden? Aufgrund fehlender PluginOutlets in diesen Komponenten?

Erwägt das DEV-Team, diese in zukünftigen Versionen zu den erwähnten Komponenten hinzuzufügen, da ich davon ausgehe, dass es keine technischen Probleme gibt, sondern eine Entscheidung von einigen Leuten, die daran arbeiten?

Danke.

Yup! Sie können gerne einen PR für den Discourse-Kern erstellen, der neue Auslässe einführt.

Ich kann nicht versprechen, dass er sofort akzeptiert wird. Aber sobald wir einen Ausgangspunkt haben, wird es einfacher sein, die Diskussion fortzusetzen.

2 „Gefällt mir“

@david, danke für den Vorschlag. Ich werde ihn berücksichtigen, wenn ich tatsächlich Zeit dafür habe. Du musst jedoch verstehen, dass dies für jemanden, der neu bei Discourse ist, einige Zeit in Anspruch nehmen kann, da ich herausfinden muss, wie ich eine mit den richtigen Änderungen vorbereite, plus, wie du erwähnt hast, die Genehmigungsphase und die Zeit, bevor es überhaupt in die nächste Veröffentlichung aufgenommen wird.

Ich hatte gehofft, dass das DEV-Team, das weitaus qualifizierter ist, dies in einer Stunde erledigen könnte, wenn es nur darum geht, einen PluginOutlet-Wrapper und ein paar weitere innerhalb der Komponenten an verschiedenen Stellen hinzuzufügen (ich könnte mich irren), was die Zeit reduzieren würde, die benötigt wird, um dies in die neue Veröffentlichung zu integrieren.

Nichtsdestotrotz werde ich, wie oben erwähnt, deinen Vorschlag berücksichtigen.

Ich habe immer noch keine Antwort auf meine Frage erhalten, ob es möglich ist, die von mir erwähnten Dinge mit der aktuellen Version von Discourse zu tun, oder ob die von mir erwähnten Änderungen zuerst hinzugefügt/beitragen werden müssen (Hinzufügen des PluginOutlets in diesen Komponenten)?

Der Grund, warum ich das frage, ist, dass ich einen Arbeitsumfang habe, der erledigt werden muss, den ich aber nicht erledigen kann, und ich muss dem Team eine Erklärung geben, warum ich ihn nicht erledigen kann. Entweder wird der Arbeitsumfang geändert, um Dinge zu tun, die wir tun können, oder ich muss dazu beitragen, in der Hoffnung, dass er in den Kern aufgenommen und in der nächsten Veröffentlichung freigegeben wird. Ich benötige also eine Bestätigung vom Discourse DEV-Team, ob dies möglich ist oder nicht.

Wenn ich mir auch das Haupt-Repository GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. ansehe, sehe ich neben den Pull Requests keinen Issues-Bereich, in dem Leute normalerweise Issues erstellen, die beschreiben, ob etwas kaputt oder fehlend ist.

Kaputte Dinge gehören in Bug, fehlende Features in Feature (oder im Falle von z.B. Plugin-Outlets in Dev).

Verwendest du den stabilen Branch? Dann ist noch einige Zeit bis zur nächsten stabilen Veröffentlichung, aber ansonsten musst du nicht warten, bis Commits zum neuesten Branch hinzugefügt werden, nachdem der PR zusammengeführt wurde.

1 „Gefällt mir“

Hallo @Moin , danke für diese Information!

Ich verwende Docker für Discourse und du hast einen guten Vorschlag bezüglich des Branches gemacht, ja, ich könnte ihn vielleicht ändern, sobald der PR zusammengeführt ist und nicht auf die eigentliche Veröffentlichung warten.

Wenn ich mir die app.yml ansehe, sehe ich, dass sie die tests-passed Version (Branch) verwendet, was meiner Annahme nach, basierend auf GIT, nicht die beste für Stabilität ist. Welchen bevorzugst du zu verwenden, main oder den latest tag? Ist es überhaupt möglich, für Docker den Tag zu verwenden?

1 „Gefällt mir“

tests-passed ist aktuell: "tests-passed" is now "latest"

Main wird nicht für den Einsatz in der Produktion empfohlen.

1 „Gefällt mir“

@david, @Falco Ich habe einen PR erstellt. Bitte überprüfe ihn und lass mich wissen, ob etwas fehlt. Ich muss dies so schnell wie möglich voranbringen. Wenn du ihn also irgendwie priorisieren könntest, wäre ich sehr dankbar.

3 „Gefällt mir“

@david, ich wollte mich nur für die schnelle Überprüfung und Zusammenführung des PR bedanken.

2 „Gefällt mir“