这个好办啊,topic model里面有一个attribute就显示了你是否已经回复过,叫posted,我之前写了个组件 Composer tip under specific tag topics 就判断了是否已经回复过。如果你有代码基础,可以看一下我写的。结合api的decorateCookedElement方法就能实现在没回复的情况下隐藏。
具体代码我懒得写了最近特别忙。
This is easy to do. There is an attribute in the topic model that shows whether you have replied to it. It is called posted
. I wrote a component before ( https://meta.discourse.org/t/composer-tip-under- specific-tag-topics/255618/1 ) determines whether you have replied. If you can program, you can take a look at what I wrote. Combined with the decorateCookedElement
method of the API
, it can be implemented.
I am too lazy to write the specific code. I have been very busy recently.
<script type="text/discourse-plugin" version="1.6.0">
const user = api.getCurrentUser();
const I18n = require("I18n");
const pid = "post_hider"
const tl4_css = `
.d-editor-preview [data-theme-hide] {
background: var(--tertiary);
color: var(--secondary);
border-top: 2px solid var(--secondary);
position: sticky;
top: 0;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
}
.d-editor-preview [data-theme-hide]::before {
content: "本帖子被设为隐藏";
}
`
api.addPostClassesCallback((attrs) => {
if (attrs?.cooked?.includes(`<div data-theme-hide="true">`)) {
return ["hiddened"]; // 添加css用的,接下来css怎么写看你了
} else {
return [];
}
});
if (!user) {
api.decorateCookedElement((el, helper) => {
function hide_post() {
setTimeout( () => {
try {
// document.querySelector(`[data-post-id="${helper?.widget?.attrs?.id}"]`)?.parentElement?.remove();
} catch (err) {
console.log(el);
console.log(err);
}
}, 1000);
}
if (el?.querySelector(`[data-theme-hide="true"]`)) {
el.innerHTML = `<p>帖子已被社区隐藏</p>`; // 修改这行
hide_post();
}
}, {
id: pid,
afterAdopt: true,
onlyStream: true,
});
}
</script>
想起来我这里有一份之前用来给未登录用户隐藏整个帖子的代码,你可以拿来参考一下
I remembered that I have a code that I used to hide the entire post from non-logged-in users. You can use it for reference.