لدي مكون سمة لعدم عرض العلامات والفئات المكتومة في البحث، ولكني قمت بتعطيله ثم أعدت تمكينه لاختبار شيء آخر، والآن لا يعمل، بما في ذلك console.log. لا يمكنني جعل api.decoratePluginOutlet يفعل أي شيء على الإطلاق، حتى في مكون سمة جديد ونظيف يعتمد على المثال الموجود في plugin-api.js.
أ. هل هناك خدعة لجعل decoratePluginOutlet يعمل، وب. هل هناك طريقة أفضل لإضافة فئة إلى عنصر قائمة نتائج البحث؟ حاليًا، أستخدم decoratePluginOutlet للحصول على العنصر والمشي لأعلى ولأسفل التسلسل الهرمي للعثور على الفئة ثم إضافتها، ولكن هذا يبدو فوضويًا. الكود الكامل أدناه.
<script type="text/discourse-plugin" version="0.8">
const discourseComputed = require("discourse-common/utils/decorators").default;
let currentUser = api.getCurrentUser();
api.decoratePluginOutlet(
"full-page-search-category",
(elem, args) => {
console.log(currentUser)
let searchCategory = elem.parentElement.parentElement
let fpsTopic = searchCategory.parentElement.parentElement
let category_id = searchCategory.children[0].getAttribute('href').split("/").slice(-1);
let search_children = searchCategory.children
let searchArray = Array.from(search_children)
let tags = searchArray.filter(item => item.classList.contains("discourse-tags"))
if (tags[0]) {
let tagList = Array.from(tags[0].children).map(x => x.innerText)
for (let index = 0; index < tagList.length; ++index) {
fpsTopic.classList.add("tagged_" + tagList[index])
}
console.log()
}
fpsTopic.classList.add("category_" + category_id)
if (currentUser) {
const muted_categories = currentUser.muted_category_ids
const muted_tags = currentUser.muted_tags
if (muted_categories) {
if (muted_categories.includes(parseInt(category_id))) {
const children = fpsTopic.childNodes;
const newNode = document.createElement("a");
const textNode = document.createTextNode("This result is from a category you have muted.");
newNode.classList.add("block-notice")
newNode.appendChild(textNode);
newNode.onclick = function() { showComment(this); };
fpsTopic.insertBefore(newNode, fpsTopic.children[0]);
fpsTopic.classList.add("blocker-blocked");
newNode.classList.remove("blocker-blocked");
}
}
if (muted_tags && tags[0]) {
let tagList = Array.from(tags[0].children).map(x => x.innerText)
if (muted_tags.some(v => tagList.includes(v))) {
const children = fpsTopic.childNodes;
const newNode = document.createElement("a");
const textNode = document.createTextNode("This result is from a tag you have muted.");
newNode.classList.add("block-notice")
newNode.appendChild(textNode);
newNode.onclick = function() { showComment(this); };
fpsTopic.insertBefore(newNode, fpsTopic.children[0]);
fpsTopic.classList.add("blocker-blocked");
newNode.classList.remove("blocker-blocked");
}
}
}
}
);
function showComment(elem) {
const cooked = elem.parentNode;
elem.remove();
cooked.classList.remove("blocker-blocked");
}
</script>