Não estou tão preocupado com o desperdício de espaço, mas encontrei outro “problema” no seu código JS, que de resto é muito bom. Talvez você possa dar uma olhada nisso?
Temos grupos de tags que são “apenas para equipe” (por exemplo, tags ocultas e tags do sistema) e grupos de tags obrigatórios para usuários por categoria. Ambos estão vinculados por meio de “Restringir estes grupos de tags a esta categoria”.
Agora, este código verifica apenas se uma categoria permite tags ou se tag_groups.length > 0 ou allowed_tags > 0, mas, infelizmente, isso sempre ocorre, pois temos esses grupos de tags apenas para equipe nos grupos de tags restritos também.
Seria possível alterar o código para levar em conta o contexto do usuário e verificar se realmente há tags disponíveis para esse usuário específico?
if(category != null) {
if (
category.allow_global_tags == true ||
category.allowed_tag_groups.length > 0 ||
category.allowed_tags.length > 0
) {
toggleTagChooser("visible");
}
}
Deveria ser possível contar apenas os públicos no array category.allowed_tag_groups.length para usuários que não são da equipe (ou estão disponíveis no array apenas os nomes e não os estados?) :
public_category.allowed_tag_groups = [public_tag_group.name, staff_only_tag_group.name]
private_category.allowed_tag_groups = [private_tag_group.name, staff_only_tag_group.name]
Ok, atualização:
No nosso caso, vamos inspecionar os nomes em allowed_tag_groups e excluí-los do array se currentUser não for da equipe. Mas isso é uma solução alternativa suja, pois não sei como adicionar o contexto do usuário aqui (ou se isso é até possível dado o código principal atual, acho que não).
var non_staff_tag_groups = category.allowed_tag_groups.filter(filterHidden);
function filterHidden(value) {
if(value.toLowerCase().indexOf("hidden") === -1 && value.toLowerCase().indexOf("system") === -1) return value;
}
if (
category.allow_global_tags == true ||
(category.allowed_tag_groups.length > 0 && this.currentUser.staff) ||
(non_staff_tag_groups.length > 0 && !this.currentUser.staff) ||
category.allowed_tags.length > 0
) {
toggleTagChooser("visible");
}
}
Mas isso é um truque sujo; todo o menu suspenso de tags no compositor deveria ser mais contextual via núcleo e deveria considerar todos os casos acima.