Hilfe zum **getSelected** und **replace** von Toolbarevent benötigt

Ich versuche, eine einfache Button-Komponente zu schreiben, um eine Funktion namens toUni aufzurufen, die entweder den gesamten Text oder den ausgewählten Text verarbeitet (ausgewählter Text wird bevorzugt). Ich kann einen einfachen Button aus dem Tutorial erstellen und den gesamten Text des Komponisten verarbeiten und meinen verarbeiteten Text zum Komponistenbereich hinzufügen. (doppelt wiederholter Text ist das Ergebnis).

Wie ersetze ich den gesamten Text aus dem Komponistenfenster (nachdem ich einige Verarbeitungen durchgeführt habe)?
Wie erhalte ich den ausgewählten Text aus dem Komponistenfenster?
Wie ersetze ich den ausgewählten Text aus dem Komponistenfenster (nachdem ich Verarbeitungen durchgeführt habe)?

Ich sehe einige Code, der Folgendes enthält:

    getSelected();
     replaceText();

Aber wenn ich es mit e.getSelected(); oder e.replaceText(old, new); kombiniere, funktioniert es nicht und ich nehme an, dass es eine Funktionsübereinstimmung oder einen Absturz gibt, da meine Alert-Box zur Rückmeldung nicht angezeigt wird.

Ich kann getText(); und addText() erfolgreich aus Ihrem Git-Ref-Code hier verwenden. Aber ich kann nicht herausfinden, wie ich den Inhalt löschen kann, nachdem ich ihn verarbeitet habe (damit ich addText() aufrufen und dann alles ersetzen kann).

Ich bevorzuge es jedoch, den ausgewählten Text zu finden und diesen zu ersetzen.

Derzeit fügt mein Code unten eine zweite Kopie des gesamten Komponistentextes direkt darunter ein, jedoch mit einigen Änderungen. Dies verwirrt den Benutzer.
Ich muss entweder den gesamten Text vollständig ersetzen … oder nur die „ausgewählten“ Wörter verarbeiten. (oder beides)

Ich habe eine Live-Version hier erstellt



<script type="text/discourse-plugin" version="0.8">

  api.onToolbarCreate(function(toolbar) {

    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // warum wird das als en.pali angezeigt?
      title: "add pali",
      perform: function(e) {
      const sel = e.getText();
      //alert(sel);
      const vel = toUni(sel);
        return   e.addText("\n--------------------new text--------------------\n" + vel + "\n--------------------end text--------------------\");
      }
    });
  });
      //e.replaceText(sel,"hello");
      //e.replaceSeelc

      //const  sel = e.selected();

      //let txt = "hello";
      //const sel = e.getSelected(0,100 );

function toUni(input) {
	if(!input || input == '') return input;
	//var nigahita = (DPR_prefs['nigahita']?'ṁ':'ṃ');
	//var Nigahita = (DPR_prefs['nigahita']?'Ṁ':'Ṃ');

	var nigahita = 'ṃ';
	var Nigahita = 'Ṃ';

	input = input.replace(/aa/g, 'ā').replace(/ii/g, 'ī').replace(/uu/g, 'ū').replace(/\\.t/g, 'ṭ').replace(/\\.d/g, 'ḍ').replace(/\\\"nk/g, 'ṅk').replace(/\\\"ng/g, 'ṅg').replace(/\\.n/g, 'ṇ').replace(/\\.m/g, nigahita).replace(/\\u1E41/g, nigahita).replace(/\\~n/g, 'ñ').replace(/\\.l/g, 'ḷ').replace(/AA/g, 'Ā').replace(/II/g, 'Ī').replace(/UU/g, 'Ū').replace(/\\.T/g, 'Ṭ').replace(/\\.D/g, 'Ḍ').replace(/\\\"N/g, 'Ṅ').replace(/\\.N/g, 'Ṇ').replace(/\\.M/g, Nigahita).replace(/\\~N/g, 'Ñ').replace(/\\.L/g, 'Ḷ').replace(/\\.ll/g,'ḹ').replace(/\\.r/g,'ṛ').replace(/\\.rr/g,'ṝ').replace(/\\.s/g,'ṣ').replace(/\"s/g,'ś').replace(/\\.h/g,'ḥ');

	return input;
}

</script>

1 „Gefällt mir“

Gibt es eine API-Referenz?

Meine API-Kenntnisse sind kaum vorhanden, daher entschuldige ich mich, falls ich etwas missverstanden habe, aber suchen Sie nach How to reverse engineer the Discourse API?

Ich bin mir nicht sicher, ob das das ist, was ich will. Ich möchte nur ein paar JavaScript-Aufrufe tätigen. Ich glaube, ich sehe sie, aber der toolevent gibt nur Zugriff auf eine kleine Auswahl von Aufrufen.

Ich kann gettext und addtext abrufen, aber nicht viel mehr.
Ich suche nach Funktionen, die diese Funktionalität nachahmen:
getselectedtext
replaceselectedtext

Ich denke, das sollte verfügbar sein.

Ich dachte, es wäre ein ziemlich langer Schuss. :slightly_smiling_face: Ich sah „API-Referenz“ und dachte, ich versuche es mal.

Ich denke, meine lächerlich danebenliegende Antwort hat vielleicht schon meine Unerfahrenheit in diesem Bereich offenbart, aber (auf die Gefahr hin, genau dasselbe wieder zu tun :slight_smile:) Ich denke, es gibt einige gute allgemeine Hinweise in Developing Discourse Themes & Theme Components, falls Sie das noch nicht gesehen haben?

Aber hoffentlich taucht jemand Kenntnisreicheres auf und kann etwas wirklich Hilfreiches anbieten. :crossed_fingers: :slight_smile:

Nun.. Ich habe einen Teil dieses Tutorials gemacht. So bin ich zum Button-Teil gekommen. Hoffentlich antwortet jemand, wie man getselected und replaceselected aus einer toolbarevent-Klasse erhält.