Toolbarevent から **getSelected** と **replace** を取得する方法

コンポーネントのシンプルなボタンを作成して、toUni という関数を呼び出し、すべてのテキストまたは選択したテキスト(選択した方が優先)を処理しようとしています。チュートリアルから簡単なボタンを作成し、コンポーザーのテキスト全体を処理して、処理済みのテキストをコンポーザー領域に追加できます。(結果としてテキストが二重に繰り返されます)。

処理を行った後、コンポーザーウィンドウのすべてのテキストを置き換えるにはどうすればよいですか?
コンポーザーウィンドウから選択したテキストを取得するにはどうすればよいですか?
処理を行った後、コンポーザーウィンドウの選択したテキストを置き換えるにはどうすればよいですか?

次のようなコードが見られます。

    getSelected();
     replaceText();

しかし、e.getSelected();e.replaceText(old, new); と組み合わせると機能せず、関数の不一致かクラッシュが発生していると思われます。アラートボックスが表示されず、フィードバックが得られません。

Gitの参照コード こちらgetText();addText() は正常に使用できます。しかし、処理後にコンテンツを削除する方法がわかりません(addText() を呼び出してすべてを置き換えるため)。

しかし、選択したテキストを見つけてそれを置き換える方が望ましいです。

現在、私のコードは以下のようになっています。これは、コンポーザーテキスト全体を少し変更したものをその下に直接追加しますが、ユーザーにとっては混乱を招きます。
すべてのテキストを完全に置き換えるか、選択した単語のみを処理する必要があります。(または両方)

ライブバージョンは こちら で確認できます。

 

 

<script type="text/discourse-plugin" version="0.8">
 
  api.onToolbarCreate(function(toolbar) {
      
    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // なぜこれが 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

APIリファレンスはありますか?

私のAPIスキルはまだ初歩的なので、もし誤解していたら申し訳ありませんが、Discourse APIのリバースエンジニアリング方法をお探しですか?

これは私が望んでいるものではないと思います。いくつかのJavaScript呼び出しを行いたいだけです。それらが見えると思いますが、tooleventは少数の呼び出しにしかアクセスできません。

gettextaddtextは取得できますが、それ以外はほとんどできません。
次のような機能を持つ関数を探しています。
getselectedtext
replaceselectedtext

これは利用可能だと思います。

それはかなり無理な賭けだと思っていました。:slightly_smiling_face: 「api reference」を見て、試してみようと思ったのです。

私の的外れな回答は、この分野での経験不足を露呈してしまったかもしれませんが、(また同じことをするリスクを冒して :slight_smile:)まだ見ていないようでしたら、Developing Discourse Themes & Theme Components には、いくつか良い一般的な指針があると思います。

しかし、もっと知識のある人が現れて、実際に役立つことを提供してくれることを願っています。:crossed_fingers: :slight_smile:

ええと…チュートリアルを少しやりました。それでボタンの部分までたどり着きました。誰かが toolbarevent クラスから getselectedreplaceselected を取得する方法について返信してくれるといいのですが。