Preciso de ajuda para **getSelected** e **replace** do Toolbarevent

Estou tentando escrever um componente de botão simples para chamar uma função chamada toUni para processar todo o texto ou o texto selecionado (o selecionado é preferível). Posso fazer um botão simples do tutorial e processar todo o texto do compositor e adicionar meu texto processado à área do compositor. (o texto repetido duas vezes é o resultado).

Como substituo todo o texto da janela do compositor (depois de ter feito algum processamento)
Como obtenho o texto selecionado da janela do compositor
Como substituo o texto selecionado da janela do compositor (depois de ter feito o processamento).

Vejo algum código que tem

    getSelected();
     replaceText();

Mas quando o combino com e.getSelected(); ou e.replaceText(old, new);, não funciona e presumo que haja alguma incompatibilidade de função ou uma falha porque ele não mostra minha caixa de alerta para me dar feedback.

Posso usar getText(); e addText() com sucesso do seu código git ref aqui. Mas não consigo descobrir como excluir o conteúdo depois de processar (para que eu possa adicionarText() e depois substituir tudo.

Mas prefiro encontrar o texto selecionado e substituí-lo.

Atualmente, meu código está abaixo, que adiciona uma segunda cópia de todo o texto do compositor logo abaixo, mas com algumas modificações. Isso confunde o usuário.
Preciso substituir totalmente todo o texto… ou processar apenas as palavras “selecionadas”. (ou ambos)

Fiz uma versão ao vivo aqui

 

 
<script type="text/discourse-plugin" version="0.8">
 
  api.onToolbarCreate(function(toolbar) {
      
    toolbar.addButton({
 
      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // por que isso aparece como en.pali?
      title: "adicionar pali",  
      perform: function(e) {
      const sel = e.getText();
      //alert(sel);
      const vel = toUni(sel);
        return   e.addText("\n--------------------novo texto--------------------\n" + vel + "\n--------------------fim do texto--------------------");
      }
    });
  });
      //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 curtida

Existe alguma referência de API?

Minhas habilidades de API são apenas emergentes, então peço desculpas se entendi mal, mas você está procurando por Como fazer engenharia reversa da API do Discourse?

Não tenho certeza se é isso que eu quero. Eu só quero fazer algumas chamadas JavaScript. Acho que as vejo, mas o toolevent só dá acesso a um pequeno conjunto de chamadas.

Eu consigo gettext e addtext, mas não muito mais.
Estou procurando por funções que imitem esta funcionalidade:
getselectedtext
replaceselectedtext

Acho que isso deveria estar disponível.

Eu pensei que era um pouco improvável. :slightly_smiling_face: Eu vi ‘referência de API’ e pensei em arriscar.

Acho que minha resposta ridiculamente fora do alvo pode já ter revelado minha inexperiência nesta área, mas (ao risco de fazer exatamente a mesma coisa novamente :slight_smile:) acho que há algumas boas dicas gerais em Developing Discourse Themes & Theme Components se você ainda não viu?

Mas espero que alguém mais experiente apareça e possa oferecer algo realmente útil. :crossed_fingers: :slight_smile:

Bem.. Eu fiz um pouco desse tutorial. Foi assim que cheguei à parte do botão. Espero que alguém responda sobre como getselected e replaceselected de uma classe toolbarevent.