需要帮助才能从 ToolbarEvent 中 **getSelected** 和 **replace**

我正在尝试编写一个简单的按钮组件来调用一个名为 toUni 的函数,该函数可以处理全部文本或选定文本(优先处理选定文本)。我可以从教程中创建一个简单的按钮,处理整个编辑器文本,并将我处理后的文本添加到编辑器区域。(双重重复文本是结果)。

在进行一些处理后,如何替换编辑器窗口中的所有文本?
如何从编辑器窗口获取选定文本?
如何替换编辑器窗口中的选定文本(在进行处理后)。

我在 代码 中看到一些代码,其中包含:

    getSelected();
     replaceText();

但是当我将它与 e.getSelected(); 或 e.replaceText(old, new); 结合使用时,它不起作用,我假设是函数不匹配或崩溃,因为它没有显示我的警报框来提供反馈。

我可以使用您在 这里 的 git ref 代码中的 getText(); 和 addText() 成功。但我无法弄清楚如何删除内容,以便我可以 addText() 然后替换所有内容。

但我更喜欢找到选定的文本并替换它。

目前我的代码如下,它在下面添加了整个编辑器文本的第二个副本,但进行了一些修改。这会让用户感到困惑。
我需要完全替换文本……或者只处理“选定的”单词。(或两者兼有)

我在这里有一个实时版本 here


<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只允许访问一小组调用。

我可以gettext和addtext,但仅此而已。
我正在寻找模仿此功能的函数:
getselectedtext
replaceselectedtext

我认为这应该是可用的。

我确实认为这有点渺茫。 :slightly_smiling_face: 我看到了“api reference”,所以就碰碰运气了。

我想我离谱的回答可能已经暴露了我在这方面的经验不足,但(冒着再次做同样事情的风险 :slight_smile:)如果你还没看过,我认为 Developing Discourse Themes & Theme Components 中有一些很好的通用建议?

但希望有更懂行的人会出现,能提供一些真正有用的东西。 :crossed_fingers: :slight_smile:

嗯……我做了一些教程。我就是这样到了按钮部分。希望有人能回应如何从 toolbarevent 类中获取 getselectedreplaceselected