تغييرات في واجهة برمجة تطبيقات مكون Discourse: استخدام api.registerValueTransformer لزر إضافة قائمة المشاركات والمكون: موضوع القائمة

مرحبًا، أنا أستخدم الإصدار 3.2.0.beta4-dev للتطوير المحلي ونسخة واجهة برمجة التطبيقات الإضافية plugin API 0.8.7 لتطوير الإضافات. ومع ذلك، بسبب التغييرات الأخيرة في Discourse، تم تعديل وظائف addPostMenuButton و component:topic-list.

كيف يمكنني استخدام api.registerValueTransformer لهذه الوظائف البرمجية؟ بالإضافة إلى ذلك، أي إصدار من API الإضافية يجب أن أستخدمه لمطابقة إصدار 3.2.0.beta4-dev لضمان التوافق مع api.registerValueTransformer؟

إليك رمزي لـ addPostMenuButton:

api.addPostMenuButton("togglePostButton", (model) => {
  const siteSettings = api.container.lookup("site-settings:main");
  const posts = siteSettings.posts;
  const array_of_posts = posts.split("|");
  const postId = model.id;
  const postIdstr = postId.toString();
  const isPost = array_of_posts.includes(postIdstr);

  return {
    action: "togglePost",
    position: "first",
    className: isPost
      ? "button.topic_hidden custom-class-hidden"
      : "button.topic_visible custom-class-visible",
    icon: isPost ? "far-eye-slash" : "far-eye",
    title: isPost ? "Hide Post" : "Show Post",
  };
});

وهذا رمزي لـ component:topic-list:

api.modifyClass("component:topic-list", {
  pluginId: "post-toggle",
  didInsertElement: function () {
    this._super();
    const topics = this.topics;
    for (let key in topics) {
      if (topics.hasOwnProperty(key)) {
        let newTopicLatest = [];
        const topic_id = topics[key].id;
        const topic_posters = topics[key].posters;

        topic_posters.forEach((poster) => {
          if (poster && poster.extras !== null && poster.extras.includes("latest")) {
            newTopicLatest = poster["description"].split(",");
          }
        });

        let userListLatest = newTopicLatest;
        if (userListLatest.length > 1 && userListLatest[0] === "Original Poster") {
          userListLatest = userListLatest.slice(1);
          userListLatest[0] = userListLatest[0].trim();
        }

        let i = 0;
        const element = $('tr[data-topic-id="' + topic_id + '"]').find(
          "a[data-user-card]"
        );

        if (element.length > 0) {
          element.each(function () {
            const poster_inside = topic_posters[i];
            if (poster_inside !== undefined && Object.keys(poster_inside).length !== 0) {
              const userElement = $(this);
              if (!userListLatest.includes(poster_inside.user.id.toString())) {
                userElement.hide();
              }
            }
            i++;
          });
        }
      }
    }
  }
});

هل يمكن لأحد مساعدتي في ذلك؟

لقد قمت بتحديث بيئة التطوير المحلية الخاصة بي من Discourse إلى الإصدار 3.5.0.beta2-dev، وإصدار واجهة برمجة التطبيقات (API) للمكون الإضافي هو 2.1.1. كيف يمكنني استخدام api.registerValueTransformer لوظيفتي addPostMenuButton و component:topic-list؟

هل قرأت الموضوع؟: Upcoming post menu changes - How to prepare themes and plugins

3 إعجابات

نعم، لقد قرأت عن هذا الموضوع، ونفذت تغييرات بناءً على تحديثات واجهة برمجة تطبيقات المكونات الإضافية الجديدة، واكتشفت أيضًا component:topic-list.

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.