بحاجة إلى مساعدة في **getSelected** و **replace** من Toolbarevent

أحاول كتابة مكون زر بسيط لاستدعاء دالة تسمى toUni لمعالجة كل النص أو النص المحدد (المحدد هو المفضل). يمكنني إنشاء زر بسيط من البرنامج التعليمي ومعالجة نص الملحن بالكامل وإضافة النص المعالج الخاص بي إلى منطقة الملحن. (النص المكرر المزدوج هو النتيجة).

كيف أستبدل كل النص من نافذة الملحن (بمجرد أن أقوم ببعض المعالجة)
كيف أحصل على النص المحدد من نافذة الملحن
كيف أستبدل النص المحدد من نافذة الملحن (بمجرد أن أقوم بالمعالجة).

أرى بعض الكود الذي يحتوي على

    getSelected();
     replaceText();

ولكن عندما أدمجها مع e.getSelected(); أو e.replaceText(old, new);، فإنها لا تعمل وأفترض أن هناك بعض عدم تطابق في الوظائف أو تعطل لأنها لا تعرض مربع التنبيه الخاص بي لمنحي ردود فعل.

يمكنني استخدام getText(); و addText() بنجاح من رمز git الخاص بك هنا. لكن لا يمكنني معرفة كيفية حذف المحتويات بعد المعالجة (حتى أتمكن من استخدام 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)

هل يوجد أي مرجع لواجهة برمجة التطبيقات؟

مهاراتي في واجهات برمجة التطبيقات (APIs) بالكاد ناشئة، لذا أعتذر إذا كنت قد أسأت الفهم، ولكن هل تبحث عن كيفية هندسة واجهة برمجة تطبيقات Discourse العكسية؟

لست متأكدًا من أن هذا هو ما أريده. أريد فقط استدعاء بعض استدعاءات جافاسكريبت. أعتقد أنني أراها ولكن toolevent يمنح الوصول فقط إلى مجموعة صغيرة من الاستدعاءات.

يمكنني الحصول على نص وإضافة نص، ولكن ليس أكثر من ذلك.
أبحث عن وظائف تحاكي هذه الوظائف:
getselectedtext
replaceselectedtext

أعتقد أنه يجب أن يكون هذا متاحًا.

لقد اعتقدت أنها كانت فرصة ضئيلة إلى حد ما. :slightly_smiling_face: رأيت “مرجع واجهة برمجة التطبيقات” وفكرت في أن أجرب حظي.
أعتقد أن إجابتي البعيدة جدًا عن الهدف قد كشفت بالفعل عن قلة خبرتي في هذا المجال، ولكن (على خطر القيام بنفس الشيء مرة أخرى :slight_smile:) أعتقد أن هناك بعض النقاط العامة الجيدة في Developing Discourse Themes & Theme Components إذا لم تكن قد رأيتها بالفعل؟

ولكن آمل أن يظهر شخص أكثر معرفة ويكون قادرًا على تقديم شيء مفيد بالفعل. :crossed_fingers: :slight_smile:

حسنًا.. لقد أكملت جزءًا من هذا البرنامج التعليمي. هذه هي الطريقة التي وصلت بها إلى جزء الزر. نأمل أن يرد شخص ما حول كيفية الحصول على getselected و replaceselected من فئة toolbarevent.