Ayuda para **getSelected** y **replace** de Toolbarevent

Estoy intentando escribir un componente de botón simple para llamar a una función llamada toUni para procesar todo el texto o el texto seleccionado (se prefiere el seleccionado). Puedo hacer un botón simple del tutorial y procesar todo el texto del compositor y agregar mi texto procesado al área del compositor. (el resultado es texto doblemente repetido).

¿Cómo reemplazo todo el texto de la ventana del compositor (una vez que he hecho algún procesamiento)?
¿Cómo obtengo el texto seleccionado de la ventana del compositor?
¿Cómo reemplazo el texto seleccionado de la ventana del compositor (una vez que he hecho el procesamiento)?

Veo algo de código que tiene

    getSelected();
     replaceText();

Pero cuando lo combino con e.getSelected(); o e.replaceText(old, new);, no funciona y supongo que hay una falta de coincidencia de funciones o un error porque no muestra mi cuadro de alerta para darme retroalimentación.

Puedo usar getText(); y addText() con éxito de su código git ref aquí. Pero no puedo averiguar cómo eliminar el contenido después de procesarlo (para poder usar addText() y luego reemplazar todo).

Pero prefiero encontrar el texto seleccionado y reemplazarlo.

Actualmente, mi código está a continuación, que agrega una segunda copia de todo el texto del compositor directamente debajo, pero con algunas modificaciones. Esto confunde al usuario.
Necesito reemplazar todo el texto por completo… o procesar solo las palabras “seleccionadas”. (o ambos)

Hice una versión en vivo aquí


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

  api.onToolbarCreate(function(toolbar) {

    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // ¿por qué esto aparece como en.pali?
      title: "agregar 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--------------------\n");
      }
    });
  });
      //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 me gusta

¿Hay alguna referencia de API?

Mis habilidades de API apenas están surgiendo, así que me disculpo si he entendido mal, pero ¿estás buscando Cómo hacer ingeniería inversa de la API de Discourse?

No estoy seguro de que esto sea lo que quiero. Solo quiero hacer algunas llamadas a JavaScript. Creo que las veo, pero toolevent solo da acceso a un pequeño conjunto de llamadas.

Puedo gettext y addtext, pero no mucho más.
Estoy buscando funciones que imiten esta funcionalidad:
getselectedtext
replaceselectedtext

Creo que esto debería estar disponible.

Pensé que era una posibilidad remota. :slightly_smiling_face: Vi ‘referencia de la API’ y pensé que lo intentaría.

Creo que mi respuesta ridículamente desacertada ya puede haber revelado mi inexperiencia en esta área, pero (a riesgo de hacer exactamente lo mismo de nuevo :slight_smile:) creo que hay algunos buenos consejos generales en Developing Discourse Themes & Theme Components si aún no lo has visto?

Pero espero que aparezca alguien más informado y pueda ofrecer algo realmente útil. :crossed_fingers: :slight_smile:

Bueno… He hecho un poco de ese tutorial. Así es como llegué a la parte del botón. Espero que alguien responda sobre cómo obtener getselected y replaceselected de una clase toolbarevent.