Besoin d'aide pour **getSelected** et **replace** à partir de Toolbarevent

Je cherche à écrire un composant de bouton simple pour appeler une fonction appelée toUni afin de traiter soit tout le texte, soit le texte sélectionné (la sélection est préférée). Je peux faire un bouton simple à partir du tutoriel et traiter l’intégralité du texte du compositeur et ajouter mon texte traité à la zone du compositeur. (le texte répété en double est le résultat).

Comment puis-je remplacer tout le texte de la fenêtre du compositeur (une fois que j’ai effectué un traitement
Comment puis-je obtenir le texte sélectionné de la fenêtre du compositeur
Comment puis-je remplacer le texte sélectionné de la fenêtre du compositeur (une fois que j’ai effectué le traitement).

Je vois du code qui contient

    getSelected();
     replaceText();

Mais lorsque je le combine avec e.getSelected(); ou e.replaceText(old, new);, cela ne fonctionne pas et je suppose qu’il y a une incompatibilité de fonction ou un crash car ma boîte d’alerte ne s’affiche pas pour me donner un retour.

Je peux utiliser getText(); et addText() avec succès à partir de votre code de référence git ici. Mais je n’arrive pas à comprendre comment supprimer le contenu après le traitement (pour pouvoir utiliser addText() et ensuite tout remplacer.

Mais je préfère trouver le texte sélectionné et le remplacer.

Actuellement, mon code ci-dessous ajoute une deuxième copie de l’intégralité du texte du compositeur juste en dessous, mais avec quelques modifications. C’est déroutant pour l’utilisateur.
Je dois soit remplacer totalement tout le texte… soit traiter uniquement les mots “sélectionnés”. (ou les deux)

J’ai créé une version en direct ici



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

  api.onToolbarCreate(function(toolbar) {

    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // pourquoi cela s'affiche-t-il comme en.pali ?
      title: "ajouter pali",
      perform: function(e) {
      const sel = e.getText();
      //alert(sel);
      const vel = toUni(sel);
        return   e.addText("\n--------------------nouveau texte--------------------\n" + vel + "\n--------------------fin texte--------------------");
      }
    });
  });
      //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 « J'aime »

Existe-t-il une référence d’API ?

Mes compétences en API sont à peine émergentes, donc je m’excuse si j’ai mal compris, mais cherchez-vous Comment faire de l’ingénierie inverse de l’API Discourse ?

Je ne suis pas sûr que ce soit ce que je veux. Je veux juste faire quelques appels JavaScript. Je pense les voir, mais le toolevent ne donne accès qu’à un petit ensemble d’appels.

Je peux gettext et addtext, mais pas grand-chose d’autre.
Je recherche des fonctions qui imitent cette fonctionnalité :
getselectedtext
replaceselectedtext

Je pense que cela devrait être disponible.

Je pensais que c’était un peu tiré par les cheveux. :slightly_smiling_face: J’ai vu « référence d’API » et j’ai pensé que je tenterai ma chance.

Je pense que ma réponse ridiculement à côté de la plaque a peut-être déjà révélé mon inexpérience dans ce domaine, mais (au risque de faire exactement la même chose à nouveau :slight_smile:) je pense qu’il y a quelques bonnes indications générales dans Developing Discourse Themes & Theme Components si vous ne l’avez pas déjà vu ?

Mais j’espère que quelqu’un de plus compétent se manifestera et pourra offrir quelque chose d’utile. :crossed_fingers: :slight_smile:

Eh bien… J’ai fait une partie de ce tutoriel. C’est ainsi que j’ai atteint la partie du bouton. J’espère que quelqu’un répondra sur la façon d’obtenir getselected et replaceselected à partir d’une classe toolbarevent.