Just a quick question, I am in the process of upgrading to 2.8.beta4 and I am just curious if there is a way to keep the old PM style, rather than have the new bubbles. Thanks!
3 个赞
Hi Zac 
It is possible with override the current css if you really want to. Try something like this 
This will looks like the default Discourse Light theme. Probably the best option is remove the archetype-private_message class from body with js. That keeps the custom theme style.
COMMON
.archetype-private_message {
.topic-avatar,
.topic-body {
border-top: 1px solid var(--primary-low);
}
.topic-body {
.cooked {
box-sizing: unset;
border: none;
margin-top: 0;
margin-left: 0;
padding: 1em 11px 0.25em 11px;
border-radius: 0;
}
&.highlighted {
animation: background-fade-highlight 2.5s ease-out;
.cooked {
animation: none;
}
}
}
.post-menu-area {
margin-top: 0;
}
.small-action-desc.timegap {
flex-wrap: wrap;
flex: 1 1 100%;
align-items: center;
padding: 1em 0;
text-transform: uppercase;
font-weight: bold;
font-size: var(--font-down-1);
color: var(--primary-medium);
}
.current-user-post,
.current-user-post:not(.moderator) {
.topic-body {
.cooked {
background: none;
border: none;
}
&.highlighted {
animation: background-fade-highlight 2.5s ease-out;
.cooked {
animation: none;
}
}
}
}
.topic-map {
border: 1px solid var(--primary-low);
border-top: none;
border-radius: 0;
padding: 0;
section {
border-top: 1px solid var(--primary-low)
}
.map:first-of-type .buttons .btn {
border: 0;
border-left: 1px solid var(--primary-low);
border-top: 1px solid transparent;
border-radius: 0;
}
.participants .user {
border: 1px solid var(--primary-low);
border-radius: 0.25em;
padding: 0;
background: none;
}
}
}
DESKTOP
.archetype-private_message {
.topic-map {
margin: 20px 0 20px 11px;
}
}
MOBILE
.archetype-private_message {
.topic-post {
margin: 0;
article {
border-top: 1px solid var(--primary-low);
}
}
.topic-body,
.topic-avatar {
border-top: none;
}
.topic-body {
flex: unset;
}
.boxed .contents {
padding: 10px 0 0 0;
}
.topic-map {
margin: 0;
}
}
7 个赞
作为一个完全的 JS 新手,最好的方法是什么?while 循环或无限递归函数似乎不理想。
我目前的解决方案如下:
<script type="text/discourse-plugin" version="0.8">
api.onPageChange(() =>{
window.onload = noBubbles();
});
async function noBubbles()
{
var elements = document.getElementsByClassName('archetype-private_message');
while(elements.length > 0){
elements[0].classList.remove('archetype-private_message');
}
}
</script>
在我这个新手看来,这似乎相当简洁,但我敢肯定会有人有更有效的方法,哈哈。
你仍然需要通过 CSS 手动撤销尽可能多的气泡效果,因为它在加载时会闪现一瞬间,但至少这以一种简单的方式阻止了它一直存在,并且应该能应对未来主题的更改。
1 个赞
但我不知道此更改是否有任何副作用。CSS 始终是最安全、最容易更改的。这就是我发布它的原因。
我不记得更改前 body 类是什么,但我只是将其替换为 archetype-regular,而不是删除 archetype-private_message 类,因为有一些针对 [class*=\"archetype-\"] 类的全局 CSS,所以我们在私信中也保留它。
标题
<script type="text/discourse-plugin" version="0.8">
const body = document.querySelector("body");
api.onPageChange(() => {
if (body.classList.contains("archetype-private_message")) {
body.classList.replace("archetype-private_message", "archetype-regular");
}
});
</script>
2 个赞
据我所知,它效果很好!
1 个赞