Hallo, ich benutze Version 3.2.0.beta4-dev für die lokale Entwicklung und Plugin-API-Version 0.8.7 für die Plugin-Entwicklung. Aufgrund jüngster Änderungen in Discourse wurden die Funktionen addPostMenuButton und component:topic-list geändert.
Wie kann ich api.registerValueTransformer für diese API-Funktionen verwenden? Außerdem, welche Plugin-API-Version sollte ich verwenden, um sie mit 3.2.0.beta4-dev abzustimmen und die Kompatibilität mit api.registerValueTransformer sicherzustellen?
Hier ist mein Code für 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 ? "Beitrag verbergen" : "Beitrag anzeigen",
};
});
Und hier ist mein Code für 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++;
});
}
}
}
}
});
Kann mir jemand dabei helfen?