Aiuto per **getSelected** e **replace** da Toolbarevent

Sto cercando di scrivere un semplice componente pulsante per chiamare una funzione chiamata toUni per elaborare tutto il testo o il testo selezionato (selezionato è preferito). Posso creare un semplice pulsante dal tutorial ed elaborare l’intero testo del compositore e aggiungere il mio testo elaborato all’area del compositore. (il risultato è un testo doppio ripetuto).

Come sostituisco tutto il testo dalla finestra del compositore (una volta che ho fatto qualche elaborazione)?
Come ottengo il testo selezionato dalla finestra del compositore?
Come sostituisco il testo selezionato dalla finestra del compositore (una volta che ho fatto l’elaborazione)?

Vedo del codice che ha

    getSelected();
     replaceText();

Ma quando lo combino con e.getSelected(); o e.replaceText(old, new);, non funziona e presumo che ci sia una discrepanza di funzioni o un crash perché non mostra la mia finestra di avviso per darmi un feedback.

Posso usare getText(); e addText() con successo dal codice del tuo git ref qui. Ma non riesco a capire come eliminare i contenuti dopo averli elaborati (in modo da poter usare addText() e poi sostituire tutto).

Ma preferirei trovare il testo selezionato e sostituirlo.

Attualmente il mio codice è il seguente, che aggiunge una seconda copia dell’intero testo del compositore subito sotto, ma con alcune modifiche. Questo confonde l’utente.
Devo sostituire completamente tutto il testo… o elaborare solo le parole “selezionate”. (o entrambi)

Ho creato una versione live qui



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

  api.onToolbarCreate(function(toolbar) {

    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // perché questo viene visualizzato come en.pali?
      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 Mi Piace

C’è un riferimento API?

Le mie competenze API sono appena emergenti, quindi mi scuso se ho frainteso, ma stai cercando Come fare reverse engineering dell’API di Discourse?

Non sono sicuro che sia quello che voglio. Voglio solo chiamare alcune chiamate javascript. Penso di vederle ma il toolevent dà accesso solo a un piccolo set di chiamate.

Posso gettext e addtext, ma non molto altro.
Sto cercando funzioni che imitino questa funzionalità:
getselectedtext
replaceselectedtext

Penso che questo dovrebbe essere disponibile.

Ho pensato che fosse un po’ un azzardo. :slightly_smiling_face: Ho visto ‘riferimento API’ e ho pensato di tentare la fortuna.

Penso che la mia risposta ridicolmente fuori strada possa già aver rivelato la mia inesperienza in questo campo, ma (a rischio di fare esattamente la stessa cosa di nuovo :slight_smile:) penso che ci siano alcuni buoni suggerimenti generali in Developing Discourse Themes & Theme Components se non l’hai già visto?

Ma spero che arrivi qualcuno più esperto e sia in grado di offrire qualcosa di veramente utile. :crossed_fingers: :slight_smile:

Beh.. Ho seguito un po’ quel tutorial. È così che sono arrivato alla parte del pulsante. Spero che qualcuno risponda su come ottenere getselected e replaceselected da una classe toolbarevent.