Temos um tema existente que gostaríamos de testar. Um exemplo seria experimentar diferentes estilos de visualização da lista de tópicos. Para isso, estamos usando o teste A/B do Google Optimize. Atualmente, planejamos mostrar o tema sem alterações para 50% dos usuários e o restante com o tema atualizado. O original e a variante devem ser definidos no mesmo tema, pois vamos experimentar apenas uma pequena parte. O problema é que as classes CSS pai compartilham o mesmo nome e queremos aplicar estilos a essas classes pai com base em uma variável específica. Como aplicar estilos separados a diferentes modelos, já que eles compartilham o mesmo nome de classe pai?
Abaixo está um cenário simplificado do que estamos tentando alcançar
Considere que tenho um tema onde o estilo da lista de tópicos é definido assim em common/common.scss
.topic-list {
tbody {
border: none;
}
tr {
border: none;
}
.example-div {
border: none;
}
}
e na minha variante, quero defini-lo como:
.topic-list {
tbody {
display: block;
tr {
display: block;
}
}
.example-div {
border: 2px solid black;
}
.another-example-div {
font-size: 10px;
}
}
Os arquivos handlebar que estão sendo sobrescritos se parecem com isso
javascripts/discourse/templates/list/custom-topic-list-item.hbr
<div class='example-div'>
Hello
</div>
javascripts/discourse/templates/list/variant-custom-topic-list-item.hbr
<div class='example-div'>
Hello,
<div class='another-example-div'>
Nice to meet you
</div>
</div>
O nome da classe topic-list é mencionado no componente do Discourse, mas a estrutura após a renderização é assim
<table class="topic-list">
<tr class="topic-list-item">
<div class='example-div'>
Hello
</div>
</tr>
</table>
Quero renderizar um desses arquivos dependendo do ID do usuário no meu arquivo de cabeçalho
common/header.html
const { findRawTemplate } = require("discourse-common/lib/raw-templates");
const user_id = api.getCurrentUser().id
api.modifyClass('component:topic-list-item', {
renderTopicListItem() {
let template = findRawTemplate("list/custom-topic-list-item");
if (user_id % 2 === 0)
template = findRawTemplate("list/variant-custom-topic-list-item");
if (template) {
this.set("topicListItemContents", template(this).htmlSafe());
}
},
});
Obrigado